1!>================================================================================ 2!! 3!! Modules: 4!! 5!! (1) nrtype_m Originally By ? Last Modified 8/22/2010 (gsm) 6!! 7!! Global constants and parameters. 8!! 9!!================================================================================ 10 11#include "f_defs.h" 12 13#ifdef HDF5 14#define AUTO_VER(x) VER_ ## x ## _HDF5 15#else 16#define AUTO_VER(x) VER_ ## x ## _FORT 17#endif 18 19module nrtype_m 20 21 implicit none 22 23 public ! only public parameters here 24 25! Below are the version number for each BerkeleyGW file. These numbers should 26! be changed whenever the structure of the file is altered and there`s either 27! incompatibility with the previous version or a new feature. The version 28! should be -1 if that file is not versioned yet, which corresponds to 29! the formats used in the Berkeley 1.0.x family. 30 integer, parameter :: VER_WFN_FORT = -1 31 integer, parameter :: VER_WFN_HDF5 = 1 32 integer, parameter :: VER_WFN = AUTO_VER(WFN) 33 integer, parameter :: VER_EPS_FORT = -1 34 integer, parameter :: VER_EPS_HDF5 = 3 35 integer, parameter :: VER_EPS = AUTO_VER(EPS) 36 integer, parameter :: VER_BSE_FORT = 1 37 integer, parameter :: VER_BSE_HDF5 = 2 38 integer, parameter :: VER_BSE = AUTO_VER(BSE) 39 40! Screening types, typically stored in a variable named `iscreen` 41 integer, parameter :: SCREEN_SEMICOND = 0 !< semiconductor screening 42 integer, parameter :: SCREEN_GRAPHENE = 1 !< graphene screening 43 integer, parameter :: SCREEN_METAL = 2 !< metal screening 44 45! Truncation flags, typically stored in a variable named `itrunc` or `icutv` 46 integer, parameter :: TRUNC_NONE = 0 !< no truncation (3D) 47 integer, parameter :: TRUNC_SPHERICAL = 2 !< 0D spherical truncation 48 integer, parameter :: TRUNC_WIRE = 4 !< 1D cell wire truncation 49 integer, parameter :: TRUNC_BOX = 5 !< 0D cell box truncation 50 integer, parameter :: TRUNC_SLAB = 6 !< 2D slab truncation 51 integer, parameter :: TRUNC_SUPERCELL = 7 !< supercell truncation (3D), experimental 52 53!> Maximum number of bands supported by the *inread* routines. This sets the 54!! size of arrays such as "occupations". These arrays should all be allocated 55!! dynamically in the future. 56 integer, parameter :: MAX_BANDS = 1000000 ! "occupations" array => 7MB 57!> Maximum number of {k,q}-points supported by the *inread* routines. 58!! The actual number of k-points/q-points in the WFN/bsemat/epsmat files 59!! can be larger. 60 integer, parameter :: MAX_KPTS = 100000 ! "kpt_read" array => 0.8 MB 61 62!> parameters for real-space resolution in cell-truncation schemes 63 integer, parameter :: n_in_box = 2 64 integer, parameter :: n_in_wire = 4 65 66!> parameter for construction of Wigner-Seitz cell 67 integer, parameter :: ncell = 3 68 69!> number of Monte-Carlo integration points 70 integer, parameter :: nmc_coarse = 250000 71 integer, parameter :: nmc_fine = 2500000 72 integer, parameter :: nmc = nmc_fine 73 74!> type definitions following the convention of Numerical Recipes 75!! do not ever use single-precision!! 76! integer, parameter :: SP = kind(1.0) 77 integer, parameter :: DP = kind(1.0d0) 78! integer, parameter :: SPC = kind((1.0,1.0)) 79 integer, parameter :: DPC = kind((1.0d0,1.0d0)) 80 81!> a shift on the grid in order to avoid the singularity for truncation 82 real(DP), parameter :: trunc_shift(3) = (/0.5d0, 0.5d0, 0.5d0/) 83 84!> physical constants 85!! 86!! These are the "2010 CODATA recommended values" taken from 87!! "The NIST Reference on Constants, Units, and Uncertainty" 88!! http://physics.nist.gov/cuu/ 89!! 90!! The following variables are used throughout the package: 91!! 'BOHR', 'bohr' is Bohr radius, in Angstrom 92!! 'RYD', 'ryd2eV', 'rydberg' is Rydberg constant times hc, in eV 93!! 'HARTREE', 'hartree' is Hartree energy, in eV 94!! 'LIGHTSPEED' is inverse alpha (fine-structure constant) 95!! 96!! These variables are defined in the following files: 97!! Common/nrtype.f90 98!! Common/svninfo.f90 99!! Common/wfn_utils.cpp 100!! MeanField/EPM/ff2vq.py 101!! MeanField/EPM/sysParams.f90 102!! MeanField/EPM/vca.py 103!! MeanField/ICM/icm.cpp 104!! Visual/common.py 105!! 106 real(DP), parameter :: BOHR = 0.52917721092_dp 107 real(DP), parameter :: RYD = 13.60569253_dp 108 real(DP), parameter :: LIGHTSPEED = 137.035999074_dp 109 110!> mathematical constants 111!! real(SP), parameter :: PI_S = 3.1415926535897932384626433832795_sp 112 real(DP), parameter :: PI_D = 3.1415926535897932384626433832795_dp 113 real(DP), parameter :: TOL_Small = 1.0d-6 114 real(DP), parameter :: TOL_Zero = 1.0d-12 115 real(DP), parameter :: TOL_Degeneracy = 1.0d-6 116 real(DP), parameter :: INF = 1.0d12 117 118!> Do direct diagonalization for BSE 119 integer, parameter :: BSE_ALGO_DIAG = 1 120!> Solve BSE with Lanczos alg. by M. Shao and C. Yang. 121 integer, parameter :: BSE_ALGO_LANCZOS = 2 122!> Solve BSE with Haydock scheme. Only works with TDA. 123 integer, parameter :: BSE_ALGO_HAYDOCK = 3 124 125end module nrtype_m 126 127#undef AUTO_VER 128