2003-01-27 06:39:33 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
! Copyright (C) 2002-2006 Quantum-Espresso group
|
2003-01-27 06:39:33 +08:00
|
|
|
! This file is distributed under the terms of the
|
|
|
|
! GNU General Public License. See the file `License'
|
|
|
|
! in the root directory of the present distribution,
|
|
|
|
! or http://www.gnu.org/copyleft/gpl.txt .
|
|
|
|
!
|
2003-10-29 18:41:05 +08:00
|
|
|
!----------------------------------------------------------------------------
|
|
|
|
MODULE constants
|
|
|
|
!----------------------------------------------------------------------------
|
|
|
|
!
|
2005-08-28 22:09:42 +08:00
|
|
|
USE kinds, ONLY : DP
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
|
|
|
! ... The constants needed everywhere
|
|
|
|
!
|
|
|
|
IMPLICIT NONE
|
|
|
|
!
|
|
|
|
SAVE
|
|
|
|
!
|
2006-06-16 18:10:53 +08:00
|
|
|
! ... Mathematical constants
|
|
|
|
!
|
2006-12-14 16:53:47 +08:00
|
|
|
REAL(DP), PARAMETER :: pi = 3.14159265358979323846_DP
|
|
|
|
REAL(DP), PARAMETER :: tpi = 2.0_DP * pi
|
|
|
|
REAL(DP), PARAMETER :: fpi = 4.0_DP * pi
|
2006-06-16 18:10:53 +08:00
|
|
|
REAL(DP), PARAMETER :: sqrtpi = 1.77245385090551602729_DP
|
|
|
|
REAL(DP), PARAMETER :: sqrtpm1= 1.0_DP / sqrtpi
|
|
|
|
REAL(DP), PARAMETER :: sqrt2 = 1.41421356237309504880_DP
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
! ... Physical constants, SI (NIST CODATA 2002)
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
REAL(DP), PARAMETER :: H_PLANCK_SI = 6.6260693D-34 ! J s
|
|
|
|
REAL(DP), PARAMETER :: K_BOLTZMANN_SI = 1.3806505D-23 ! J K^-1
|
|
|
|
REAL(DP), PARAMETER :: ELECTRON_SI = 1.60217653D-19 ! C
|
|
|
|
REAL(DP), PARAMETER :: ELECTRONVOLT_SI = 1.60217653D-19 ! J
|
|
|
|
REAL(DP), PARAMETER :: ELECTRONMASS_SI = 9.1093826D-31 ! Kg
|
|
|
|
REAL(DP), PARAMETER :: HARTREE_SI = 4.35974417D-18 ! J
|
|
|
|
REAL(DP), PARAMETER :: RYDBERG_SI = HARTREE_SI/2.0_DP! J
|
|
|
|
REAL(DP), PARAMETER :: BOHR_RADIUS_SI = 0.5291772108D-10 ! m
|
|
|
|
REAL(DP), PARAMETER :: AMU_SI = 1.66053886D-27 ! Kg
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
! ... Physical constants, atomic units:
|
|
|
|
! ... AU for "Hartree" atomic units (e = m = hbar = 1)
|
|
|
|
! ... RY for "Rydberg" atomic units (e^2=2, m=1/2, hbar=1)
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
REAL(DP), PARAMETER :: K_BOLTZMANN_AU = K_BOLTZMANN_SI / HARTREE_SI
|
|
|
|
REAL(DP), PARAMETER :: K_BOLTZMANN_RY = K_BOLTZMANN_SI / RYDBERG_SI
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
! ... Unit conversion factors: energy and masses
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
REAL(DP), PARAMETER :: AUTOEV = HARTREE_SI / ELECTRONVOLT_SI
|
|
|
|
REAL(DP), PARAMETER :: RYTOEV = AUTOEV / 2.0_DP
|
|
|
|
REAL(DP), PARAMETER :: AMU_AU = AMU_SI / ELECTRONMASS_SI
|
|
|
|
REAL(DP), PARAMETER :: AMU_RY = AMU_AU / 2.0_DP
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
! ... Unit conversion factors: atomic unit of time, in s and ps
|
2003-11-05 19:35:48 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
REAL(DP), PARAMETER :: AU_SEC = H_PLANCK_SI/tpi/HARTREE_SI
|
|
|
|
REAL(DP), PARAMETER :: AU_PS = AU_SEC * 1.0D+12
|
2003-11-05 19:35:48 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
! ... Unit conversion factors: pressure (1 Pa = 1 J/m^3, 1GPa = 10 Kbar )
|
2003-11-05 19:35:48 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
REAL(DP), PARAMETER :: AU_GPA = HARTREE_SI / BOHR_RADIUS_SI ** 3 &
|
|
|
|
/ 1.0D+9
|
|
|
|
REAL(DP), PARAMETER :: RY_KBAR = 10.0_dp * AU_GPA / 2.0_dp
|
|
|
|
!
|
|
|
|
! ... Unit conversion factors: 1 debye = 10^-18 esu*cm
|
|
|
|
! ... = 3.3356409519*10^-30 C*m
|
|
|
|
! ... = 0.208194346 e*A
|
|
|
|
! ... ( 1 esu = (0.1/c) Am, c=299792458 m/s)
|
|
|
|
!
|
2006-12-14 16:53:47 +08:00
|
|
|
REAL(DP), PARAMETER :: DEBYE_SI = 3.3356409519d0 * 1.0D-30 ! C*m
|
2006-08-31 00:32:10 +08:00
|
|
|
REAL(DP), PARAMETER :: AU_DEBYE = ELECTRON_SI * BOHR_RADIUS_SI / &
|
2006-12-11 18:19:53 +08:00
|
|
|
DEBYE_SI
|
2006-08-31 00:32:10 +08:00
|
|
|
!
|
|
|
|
REAL(DP), PARAMETER :: eV_to_kelvin = ELECTRONVOLT_SI / K_BOLTZMANN_SI
|
|
|
|
REAL(DP), PARAMETER :: ry_to_kelvin = RYDBERG_SI / K_BOLTZMANN_SI
|
2003-11-05 19:35:48 +08:00
|
|
|
!
|
|
|
|
! ... zero up to a given accuracy
|
|
|
|
!
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), PARAMETER :: eps4 = 1.0D-4
|
2006-04-11 23:38:24 +08:00
|
|
|
REAL(DP), PARAMETER :: eps6 = 1.0D-6
|
2005-08-28 22:09:42 +08:00
|
|
|
REAL(DP), PARAMETER :: eps8 = 1.0D-8
|
|
|
|
REAL(DP), PARAMETER :: eps14 = 1.0D-14
|
|
|
|
REAL(DP), PARAMETER :: eps16 = 1.0D-16
|
|
|
|
REAL(DP), PARAMETER :: eps32 = 1.0D-32
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
2006-06-16 18:10:53 +08:00
|
|
|
REAL(DP), PARAMETER :: gsmall = 1.0d-12
|
|
|
|
!
|
|
|
|
REAL(DP), PARAMETER :: e2 = 2.D0 ! the square of the electron charge
|
|
|
|
REAL(DP), PARAMETER :: degspin = 2.D0 ! the number of spins per level
|
2003-10-29 18:41:05 +08:00
|
|
|
!
|
2006-08-31 00:32:10 +08:00
|
|
|
!!!!!! COMPATIBIILITY
|
|
|
|
!
|
|
|
|
REAL(DP), PARAMETER :: amconv = AMU_RY
|
|
|
|
REAL(DP), PARAMETER :: uakbar = RY_KBAR
|
2006-12-14 16:53:47 +08:00
|
|
|
REAL(DP), PARAMETER :: bohr_radius_cm = bohr_radius_si * 100.0d0
|
2006-09-13 01:11:36 +08:00
|
|
|
REAL(DP), PARAMETER :: BOHR_RADIUS_ANGS = bohr_radius_cm * 1.0D8
|
2006-12-14 16:53:47 +08:00
|
|
|
REAL(DP), PARAMETER :: ANGSTROM_AU = 1.0d0/BOHR_RADIUS_ANGS
|
2006-08-31 00:32:10 +08:00
|
|
|
REAL(DP), PARAMETER :: DIP_DEBYE = AU_DEBYE
|
|
|
|
REAL(DP), PARAMETER :: AU_TERAHERTZ = AU_PS
|
|
|
|
REAL(DP), PARAMETER :: AU_TO_OHMCMM1 = 46000.0D0 ! (ohm cm)^-1
|
|
|
|
!
|
|
|
|
|
2003-10-29 18:41:05 +08:00
|
|
|
END MODULE constants
|
2007-01-08 19:49:09 +08:00
|
|
|
|
|
|
|
! perl script to create a program to list the available constants:
|
|
|
|
! extract with: grep '^!XX!' constants.f90 | sed 's,!XX!,,' > mkconstlist.pl
|
|
|
|
! then run: perl mkconstlist.pl constants.f90 > testme.f90
|
|
|
|
! and compile and run: testme.f90
|
|
|
|
!XX!#!/usr/bin/perl -w
|
|
|
|
!XX!
|
|
|
|
!XX!use strict;
|
|
|
|
!XX!
|
|
|
|
!XX!print <<EOF
|
|
|
|
!XX!! list all available constants and derived values
|
|
|
|
!XX!
|
|
|
|
!XX!PROGRAM list_constants
|
|
|
|
!XX!
|
|
|
|
!XX! USE kinds, ONLY : DP
|
|
|
|
!XX! USE constants
|
|
|
|
!XX!
|
|
|
|
!XX!EOF
|
|
|
|
!XX!;
|
|
|
|
!XX!
|
|
|
|
!XX!while(<>) {
|
|
|
|
!XX! if ( /REAL\s*\(DP\)\s*,\s*PARAMETER\s*::\s*([a-zA-Z_0-9]+)\s*=.*$/ ) {
|
|
|
|
!XX! print " WRITE (*,'(A18,G24.17)') '$1:',$1\n";
|
|
|
|
!XX! }
|
|
|
|
!XX!}
|
|
|
|
!XX!
|
|
|
|
!XX!print <<EOF
|
|
|
|
!XX!
|
|
|
|
!XX!END PROGRAM list_constants
|
|
|
|
!XX!EOF
|
|
|
|
!XX!;
|
|
|
|
!XX!
|