| 
				     | 
				
| Line 1: | 
Line 1: | 
| − | # SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience
  |   | 
|   |  |   |  | 
| − | SALMON is an open-source software based on first-principles time-dependent density functional theory
  |   | 
| − | to describe optical responses and electron dynamics in matters induced by light electromagnetic fields.
  |   | 
| − | 
  |   | 
| − | SALMON has been developed in such a way that it runs optimally in the following supercomputer platforms:
  |   | 
| − | 
  |   | 
| − | - K-computer
  |   | 
| − | - Fujitsu FX100 supercomputer system
  |   | 
| − | - Linux PC Cluster with x86-64 CPU
  |   | 
| − | - Linux PC Cluster with Intel Xeon Phi processor
  |   | 
| − | 
  |   | 
| − | For more information, please visit our website.
  |   | 
| − | 
  |   | 
| − | http://salmon-tddft.jp/
  |   | 
| − | 
  |   | 
| − | ## License
  |   | 
| − | 
  |   | 
| − | SALMON is available under Apache License version 2.0.
  |   | 
| − | 
  |   | 
| − |     Copyright 2017 SALMON developers
  |   | 
| − |     
  |   | 
| − |     Licensed under the Apache License, Version 2.0 (the "License");
  |   | 
| − |     you may not use this file except in compliance with the License.
  |   | 
| − |     You may obtain a copy of the License at
  |   | 
| − |   
  |   | 
| − |        http://www.apache.org/licenses/LICENSE-2.0
  |   | 
| − | 
  |   | 
| − |     Unless required by applicable law or agreed to in writing, software
  |   | 
| − |     distributed under the License is distributed on an "AS IS" BASIS,
  |   | 
| − |     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  |   | 
| − |     See the License for the specific language governing permissions and
  |   | 
| − |     limitations under the License.
  |   | 
| − | 
  |   | 
| − | 
  |   | 
| − | # Files
  |   | 
| − | 
  |   | 
| − | This package is composed of the following files:
  |   | 
| − | 
  |   | 
| − | - configure.py
  |   | 
| − | The python script to build SALMON. It uses CMake for the build process, and is the default choice for the build process.
  |   | 
| − | 
  |   | 
| − | - CMakeList.txt
  |   | 
| − | CMake script that is used in configure.py.
  |   | 
| − | 
  |   | 
| − | - cmakefiles (directory)
  |   | 
| − | CMake related files.
  |   | 
| − | 
  |   | 
| − | - examples (directory)
  |   | 
| − | A few sample calculations using SALMON are included.
  |   | 
| − | Detailed explanations of these examples are described in the web site, http://salmon-tddft.jp/wiki/Exercises.
  |   | 
| − | 
  |   | 
| − | - LICENCE
  |   | 
| − | License document of SALMON.
  |   | 
| − | 
  |   | 
| − | - makefiles
  |   | 
| − | GNU Makefiles to build SALMON.
  |   | 
| − | 
  |   | 
| − | - manual
  |   | 
| − | A list of namalist variables that is usable in input files.
  |   | 
| − | 
  |   | 
| − | - README.md
  |   | 
| − | This file.
  |   | 
| − | 
  |   | 
| − | - src
  |   | 
| − | Source code files of SALMON.
  |   | 
| − | 
  |   | 
| − | - testsuites
  |   | 
| − | Files that are used in the automatic test of SALMON. 
  |   | 
| − | It can also be used to examine if the build process is successful in the user’s environment.
  |   | 
| − | 
  |   | 
| − | - tools
  |   | 
| − | Some tools and utilities related to SALMON.
  |   | 
| − | 
  |   | 
| − | # Install and Run
  |   | 
| − | 
  |   | 
| − | == Prerequisites ==
  |   | 
| − | 
  |   | 
| − | In this guide, it is assumed that readers have a basic knowledge of Unix and its command line operations. 
  |   | 
| − | For the installation of SALMON, following packages are required.
  |   | 
| − | 
  |   | 
| − | * Fortran90/C compiler. SALMON assumes users have one of the following compilers:
  |   | 
| − | ** GCC (Gnu Compiler Collection)
  |   | 
| − | ** Intel Fortran/C Compiler
  |   | 
| − | ** Fujitsu Compiler (at FX100 / K-Computer)
  |   | 
| − | 
  |   | 
| − | * One of the following library packages for linear algebra:
  |   | 
| − | ** BLAS/LAPACK
  |   | 
| − | ** Intel Math Kernel Library (MKL)
  |   | 
| − | ** Fujitsu Scientific Subroutine Library 2 (SSL-II)
  |   | 
| − | 
  |   | 
| − | * Build tools.
  |   | 
| − | ** CMake
  |   | 
| − | 
  |   | 
| − | If you use other compilers, you may need to change build scripts (CMake). See [[#Additional options in configure.py script]].
  |   | 
| − | If no numerical library is installed on your computer system, you may need to install BLAS/LAPACK by yourself.
  |   | 
| − | See [[Troubleshooting of the Installation Process]].
  |   | 
| − | 
  |   | 
| − | For the installation of SALMON, we adopt the CMake tools as the first option.
  |   | 
| − | If there were any problems to use CMake tools in your environment, you may use the GNU make tools.
  |   | 
| − | See [[Troubleshooting of the Installation Process]].
  |   | 
| − | 
  |   | 
| − | == Download ==
  |   | 
| − | 
  |   | 
| − | The newest version of SALMON can be downloaded from [[Download]].
  |   | 
| − | To extract files from the downloaded file ''salmon-<VERSION>.tar.gz'', type the following command in the command-line,
  |   | 
| − | 
  |   | 
| − |  $ tar –zxvf ./salmon-<VERSION>.tar.gz
  |   | 
| − | 
  |   | 
| − | After the extraction, the following directories will be created.
  |   | 
| − | 
  |   | 
| − |  SALMON
  |   | 
| − |   |- src        Source codes
  |   | 
| − |   |- example    Samples
  |   | 
| − |   |- makefiles   GNU Makefiles for building
  |   | 
| − |   |- cmakefiles   CMake related files
  |   | 
| − |   |- makefiles   GNU Makefiles for building
  |   | 
| − | 
  |   | 
| − | == Build ==
  |   | 
| − | 
  |   | 
| − | To compile SALMON to create executable the binary files, we adopt to use CMake tools as the first option.
  |   | 
| − | In case you fail to build SALMON using CMake in your environment, we may use Gnu Make. See [[#Build using GNU Makefile]].
  |   | 
| − | 
  |   | 
| − | === Checking CMake availability ===
  |   | 
| − | 
  |   | 
| − | First, examine whether CMake is usable in your environment or not.
  |   | 
| − | Type the following in Unix command-line:
  |   | 
| − | 
  |   | 
| − |  $ cmake --version
  |   | 
| − | 
  |   | 
| − | If CMake is not installed in your system, an error message such as <code>cmake: command not found</code> will appear. 
  |   | 
| − | If CMake is installed on your system, the version number will be shown.
  |   | 
| − | To build SALMON, CMake of version 3.0.2 or later is required. 
  |   | 
| − | If you confirm that CMake of version 3.0.2 or later is installed in your system, proceed to [[#Build using CMake]].
  |   | 
| − | However, we realize that old versions of CMake are installed in many systems.
  |   | 
| − | If CMake is not installed or CMake of older versions is installed in your system, you need to install the new version by yourself.
  |   | 
| − | It is a simple procedure and explained below.
  |   | 
| − | 
  |   | 
| − | === Installation of CMake  ===
  |   | 
| − | 
  |   | 
| − | [https://cmake.org/|CMake CMake] is a cross-platform build tool.
  |   | 
| − | The simplest way to make CMake usable in your environment is to get the binary distribution of CMake from the [https://cmake.org/download/  download page]. The file name of the binary distribution will be <code>cmake-<VERSION>-<PLATFORM>.tar.gz</code>). In standard Unix environment, a file for the platform of Linux x86_64 will be appropriate. 
  |   | 
| − | 
  |   | 
| − | To download the file, proceed as follows: We assume that you are in the directory that you extracted files from the downloaded file of SALMON,
  |   | 
| − | and that you will use the version 3.8.2. First get the URL of the download link from your browser, and use <code>wget</code> command in your Unix command-line.
  |   | 
| − | <pre>
  |   | 
| − | $ wget https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.tar.gz
  |   | 
| − | </pre>
  |   | 
| − | Next, unpack the archive by
  |   | 
| − | <pre>
  |   | 
| − | $ tar -zxvf cmake-3.8.2-Linux-x86_64.tar.gz
  |   | 
| − | </pre>
  |   | 
| − | and you will have the binary <code>make-3.8.2-Linux-x86_64/bin/cmake</code> in your directory.  
  |   | 
| − | 
  |   | 
| − | To make the <code>cmake</code> command usable in your command-line, you need to modify the environment variable <code>$PATH</code> so that the executable of CMake are settled inside the directory specified in your <code>$PATH</code>.
  |   | 
| − | If you use the bash shell, you need to modify the file <code>~/.bashrc</code> that specifies the <code>$PATH</code> variable. It can be done by typing the following command in your login directory,
  |   | 
| − | <pre>
  |   | 
| − | $ export PATH=<SALMON_INSTALLATION_DIRECTORY>/cmake-3.8.2-Linux-x86_64/bin:$PATH
  |   | 
| − | </pre>
  |   | 
| − | and then reload the configuration by typing:
  |   | 
| − | <pre>
  |   | 
| − | $ source ~/.bashrc
  |   | 
| − | </pre>
  |   | 
| − | 
  |   | 
| − | === Build using CMake ===
  |   | 
| − | 
  |   | 
| − | Confirming that CMake of version 3.0.2 or later can be usable in your environment, proceed the following steps. 
  |   | 
| − | We assume that you are in the directory SALMON.
  |   | 
| − | * Create a new temporary directory ''build'' and move to the directory,
  |   | 
| − | 
  |   | 
| − |  $ mkdir build
  |   | 
| − |  $ cd build
  |   | 
| − | 
  |   | 
| − | * Execute the python script ''configure.py'' and then make,
  |   | 
| − | 
  |   | 
| − |  $ python ../configure.py –arch=ARCHITECTURE --prefix=../
  |   | 
| − |  $ make
  |   | 
| − |  $ make install
  |   | 
| − | 
  |   | 
| − | In executing the python script, you need to specify ''ARCHITECTURE'' that indicates the architecture of the CPU in your computer system such as ''intel-avx''. The options of the ''ARCHITECUTRE'' are as follows:
  |   | 
| − | 
  |   | 
| − | {| class="wikitable"
  |   | 
| − | | arch       || Detail                          || Compiler         || Numerical Library 
  |   | 
| − | |-
  |   | 
| − | | intel-knl || Intel Knights Landing || Intel Compiler || Intel MKL              
  |   | 
| − | |-
  |   | 
| − | | intel-knc || Intel Knights Corner  || Intel Compiler || Intel MKL              
  |   | 
| − | |-
  |   | 
| − | | intel-avx || Intel Processer (Ivy-, Sandy-Bridge)   || Intel Compiler || Intel MKL 
  |   | 
| − | |-
  |   | 
| − | | intel-avx2 || Intel Processer (Haswell, Broadwell ..) || Intel Compiler || Intel MKL 
  |   | 
| − | |-
  |   | 
| − | | intel-avx512 || Intel Processer (Skylake-SP) || Intel Compiler || Intel MKL 
  |   | 
| − | |-
  |   | 
| − | | fujitsu-fx100 || FX100 Supercomputer || Fujitsu Compiler || SSL-II 
  |   | 
| − | |-
  |   | 
| − | | fujitsu-k || Fujitsu FX100 / K-computer || Fujitsu Compiler || SSL-II 
  |   | 
| − | |}
  |   | 
| − | 
  |   | 
| − | If the build is successful, you will get a file ''salmon.cpu'' at the directory ''salmon/bin''.
  |   | 
| − | If you specify many-core architechtures, ''intel-knl'' or ''intel-knc'', you find a file ''salmon.mic'' or both files ''salmon.cpu'' and ''salmon.mic''.
  |   | 
| − | 
  |   | 
| − | === Build for single process calculations ===
  |   | 
| − | 
  |   | 
| − | In default, the python script assumes parallel execution. 
  |   | 
| − | If you use a single processor machine, specify <code>--disable-mpi</code> in executing the python script:
  |   | 
| − | 
  |   | 
| − |   $ python ../configure.py --arch=<ARCHITECTURE> --disable-mpi
  |   | 
| − | 
  |   | 
| − | == Files necessary to run SALMON ==
  |   | 
| − | 
  |   | 
| − | To run SALMON, at least two kinds of files are required for any calculations. 
  |   | 
| − | One is an input file with the filename extension ''*.inp*'' that should be read from the standard input ''stdin''. 
  |   | 
| − | This file should be prepared in the Fortran90 namelist format. 
  |   | 
| − | Pseudopotential files of relevant elements are also required. 
  |   | 
| − | Depending on your purpose, some other files may also be necessary. 
  |   | 
| − | For example, coordinates of atomic positions of the target material may be either written in the input file or prepared as a separate file.
  |   | 
| − | 
  |   | 
| − | === Pseudopotentials ===
  |   | 
| − | 
  |   | 
| − | SALMON utilizes norm-conserving pseudpotentials. 
  |   | 
| − | You may find pseudopotentials of some elements in the samples prepared in [[Exercises]]. 
  |   | 
| − | In SALMON, several formats of pseudopotentials may be usable. 
  |   | 
| − | Pseudopotentials with an extension ''.fhi'' can be obtained from the website listed below.
  |   | 
| − | (This is a part of previous atomic data files for the ABINIT code.)
  |   | 
| − | 
  |   | 
| − | {| class="wikitable"
  |   | 
| − | | pseudopotential || website 
  |   | 
| − | |-
  |   | 
| − | | Pseudopotentials for the ABINIT code ||  https://www.abinit.org/sites/default/files/PrevAtomicData/psp-links/psp-links/lda_fhi
  |   | 
| − | |}
  |   | 
| − | 
  |   | 
| − | Filenames of the pseudopotentials should be written in the input file.
  |   | 
| − | 
  |   | 
| − | === input file ===
  |   | 
| − | 
  |   | 
| − | Input files are composed of several blocks of namelists,
  |   | 
| − | 
  |   | 
| − |  &namelist1
  |   | 
| − |    variable1 = int_value
  |   | 
| − |    variable2 = 'char_value'
  |   | 
| − |   /
  |   | 
| − |  &namelist2
  |   | 
| − |    variable1 = real8_value
  |   | 
| − |    variable2 = int_value1, int_value2, int_value3
  |   | 
| − |  /
  |   | 
| − | 
  |   | 
| − | A block of namelists starts with ''&namelist'' line and ends with ''/'' line. 
  |   | 
| − | The blocks may appear in any order.
  |   | 
| − | 
  |   | 
| − | Between two lines of ''&namelist'' and ''/'', descriptions of variables and their values appear. 
  |   | 
| − | Note that many variables have their default values so that it is not necessary to give values for all variables. 
  |   | 
| − | Descriptions of the variables may appear at any position if they are between ''&namelist'' and ''/''.
  |   | 
| − | 
  |   | 
| − | SALMON describes electron dynamics in systems with both isolated and periodic boundary conditions. 
  |   | 
| − | The boundary condition is specified by the variable ''iperiodic'' in the namelist ''&system''. 
  |   | 
| − | 
  |   | 
| − | Calculations are usually achieved in two steps; first, the ground state calculation is carried out and then electron dynamics calculations in real time is carried out. A choice of the calculation mode is specified by the variable ''calc_mode'' in the namelist ''&calculation''. 
  |   | 
| − | For isolated systems, the ground state and the electron dynamics calculations should be carried out as two separate executions.
  |   | 
| − | First the ground state calculation is carried out specifying ''calc_mode = 'GS' ''.
  |   | 
| − | Then the real-time electron dynamics calculation is carried out specifying ''calc_mode = 'RT' ''.
  |   | 
| − | For periodic systems, two calculations should be carried out as a single execution specifying ''calc_mode = 'GS_RT' ''. 
  |   | 
| − | 
  |   | 
| − | In [[Exercises]], we prepare six exercises that cover typical calculations feasible by SALMON. 
  |   | 
| − | We prepare explanations of the input files of the exercises that will help to prepare input files of your own interests.
  |   | 
| − | 
  |   | 
| − | There are more than 20 groups of namelists. A complete list of namelist variables is given in the file ''SALMON/manual/input_variables.md''.
  |   | 
| − | Namelist variables that are used in our exercises are explained at [[Input variables]].
  |   | 
| − | 
  |   | 
| − | == Run SALMON ==
  |   | 
| − | 
  |   | 
| − | Before running SALMON, the following preparations are required as described above: The executable file of ''salmon.cpu'' (and ''salmon.mic'' if your system is the many-core machine) should be built from the source file of SALMON. An input file ''inputfile.inp'' and pseudopotential files should also be prepared. 
  |   | 
| − | 
  |   | 
| − | The execution of the calculation can be done as follows: In single process environment, type the following command:
  |   | 
| − | 
  |   | 
| − |  $ salmon.cpu < inputfile.inp > fileout.out
  |   | 
| − | 
  |   | 
| − | In multiprocess environment in which the command to execute parallel calculations using MPI is ''mpiexec'', type the following command: 
  |   | 
| − | 
  |   | 
| − |  $ mpiexec -n NPROC salmon.cpu < inputfile.inp > fileout.out
  |   | 
| − | 
  |   | 
| − | where NPROC is the number of MPI processes that you will use.
  |   | 
| − | In many-core processor (e.g. intel-knl)  environment, the execution command is
  |   | 
| − | 
  |   | 
| − |  $ mpiexec.hydra -n NPROC salmon.mic < inputfile.inp > fileout.out
  |   | 
| − | 
  |   | 
| − | The execution command and the job submission procedure depends much on local environment. We summarize general conditions to execute SALMON:
  |   | 
| − | 
  |   | 
| − | * SALMON runs in both single-process and multi-process environments using MPI.
  |   | 
| − | * executable files are prepared as ''/salmon/bin/salmon.cpu'' and/or ''/salmon/bin/salmon.mic'' in the standard build procedure.
  |   | 
| − | * to start calculations, ''inputfile.inp'' should be read through ''stdin''.
  |   | 
| − | 
  |   | 
| − | =  Appendix  =
  |   | 
| − | 
  |   | 
| − | == Additional options in configure.py script ==
  |   | 
| − | 
  |   | 
| − | === Manual specifications of compiler and environment variables ===
  |   | 
| − | 
  |   | 
| − | In executing <code>configure.py</code>, you may manually specify compiler and environment variables instead of specifying the architecture, for example:
  |   | 
| − | 
  |   | 
| − |  $ python ../configure.py FC=mpiifort CC=mpiicc FFLAGS="-xAVX" CFLAGS="-restrict -xAVX"
  |   | 
| − | 
  |   | 
| − | The major options of <code>configure.py</code> are as follows:
  |   | 
| − |  {| class="wikitable"
  |   | 
| − |  | Commandline switch       || Detail                        
  |   | 
| − |  |-
  |   | 
| − |  | -a ARCH, --arch=ARCH || Target architecture   
  |   | 
| − |  |-
  |   | 
| − |  | --enable-mpi, --disable-mpi   ||  enable/disable MPI parallelization.
  |   | 
| − |  |-
  |   | 
| − |  | --enable-scalapack, --disable-scalapack  ||   enable/disable computations with ScaLAPACK library
  |   | 
| − |  |-
  |   | 
| − |  | FC, FFLAGS  ||   User-defined Fortran Compiler, and the compiler options
  |   | 
| − |  |-
  |   | 
| − |  | CC, CFLAGS  ||   User-defined C Compiler, and the compiler options
  |   | 
| − |  |}
  |   | 
| − | 
  |   | 
| − | === Build for single process calculations ===
  |   | 
| − | 
  |   | 
| − | If you use a single processor machine, specify <code>--disable-mpi</code> in executing the python script:
  |   | 
| − | 
  |   | 
| − |   $ python ../configure.py --arch=<ARCHITECTURE> --disable-mpi
  |   | 
| − | 
  |   | 
| − | === Build in GCC/GFortran environemnt ===
  |   | 
| − | 
  |   | 
| − | If you use GCC/GFortran compiler, specify the following flags in executing the python script:
  |   | 
| − | 
  |   | 
| − |  $ python ../configure.py FC=gfortran CC=gcc FFLAG=-O3 CFLAG=-O3
  |   | 
| − | 
  |   | 
| − | == Build using GNU Makefile ==
  |   | 
| − | 
  |   | 
| − | If CMake build fails in your environment, we recommend you to try to use Gnu Make for the build process.
  |   | 
| − | First, enter the directory ''makefiles'':
  |   | 
| − | 
  |   | 
| − |  $ cd SALMON/makefiles
  |   | 
| − | 
  |   | 
| − | In the directory, ''Makefile'' files are prepared for several architectures:
  |   | 
| − | * fujitsu
  |   | 
| − | * gnu
  |   | 
| − | * gnu-without-mpi
  |   | 
| − | * intel
  |   | 
| − | * intel-avx
  |   | 
| − | * intel-avx2
  |   | 
| − | * intel-knc
  |   | 
| − | * intel-knl
  |   | 
| − | * intel-without-mpi
  |   | 
| − | 
  |   | 
| − | ''Makefile'' files with <code>-without-mpi</code> indicate that they are for single processor environment.
  |   | 
| − | Choose ''Makefile'' appropriate for your environment, and execute the make command:
  |   | 
| − | 
  |   | 
| − |  $ make -f Makefile.PLATFORM
  |   | 
| − | 
  |   | 
| − | If the make proceeds successful, a binary file is created in the directory <code>SALMON/bin/</code>.
  |   |