TABLE OF CONTENTS


ABINIT/m_libpaw_defs [ Modules ]

[ Top ] [ Modules ]

NAME

 m_libpaw_defs

FUNCTION

 Several definitions used in libPAW: named constants, physical constants, datatypes

COPYRIGHT

 Copyright (C) 2000-2022 ABINIT group
 This file is distributed under the terms of the
 GNU General Public License, see ~abinit/COPYING
 or http://www.gnu.org/copyleft/gpl.txt .

NOTES

  This file comes directly from defs_basis.F90 module delivered with ABINIT.

  FOR DEVELOPPERS: in order to preserve the portability of libPAW library,
  please consult ~abinit/src/??_libpaw/libpaw-coding-rules.txt

SOURCE

 22 module m_libpaw_defs
 23 
 24  implicit none
 25 
 26 !Double precision real/complex subtypes
 27 !-----------------------------------------------
 28  integer, parameter :: dp=kind(1.0d0)                   !Nb of bytes related to DP real numbers
 29  integer, parameter :: dpc=kind((1.0_dp,1.0_dp))        !Nb of bytes related to DP complex numbers
 30 
 31 !Real constants
 32 !-----------------------------------------------
 33  real(dp), parameter :: zero=0._dp
 34  real(dp), parameter :: one=1._dp
 35  real(dp), parameter :: two=2._dp
 36  real(dp), parameter :: three=3._dp
 37  real(dp), parameter :: four=4._dp
 38  real(dp), parameter :: half=0.50_dp
 39  real(dp), parameter :: third=one/three
 40  real(dp), parameter :: quarter=0.25_dp
 41  real(dp), parameter :: eighth=0.125_dp
 42  real(dp), parameter :: sqrt2=1.4142135623730950488016887242096939_dp
 43  real(dp), parameter :: sqrt3=1.7320508075688772935274463415058739_dp
 44  real(dp), parameter :: sqrthalf=0.70710678118654752440084436210484697_dp
 45  real(dp), parameter :: pi=3.141592653589793238462643383279502884197_dp
 46  real(dp), parameter :: two_pi=two*pi
 47  real(dp), parameter :: four_pi=four*pi
 48  real(dp), parameter :: tol3= 0.001_dp
 49  real(dp), parameter :: tol6= 0.000001_dp
 50  real(dp), parameter :: tol8= 0.00000001_dp
 51  real(dp), parameter :: tol9= 0.000000001_dp
 52  real(dp), parameter :: tol10=0.0000000001_dp
 53  real(dp), parameter :: tol12=0.000000000001_dp
 54  real(dp), parameter :: tol14=0.00000000000001_dp
 55  real(dp), parameter :: tol16=0.0000000000000001_dp
 56 
 57 !Complex constants
 58 !-----------------------------------------------
 59  complex(dpc), parameter :: czero=(0._dp,0._dp)         ! 0 (complex)
 60  complex(dpc), parameter :: cone =(1._dp,0._dp)         ! 1 (complex)
 61 
 62 !Character constants
 63 !-----------------------------------------------
 64  character(len=1), parameter :: ch10 = char(10)         ! carriage return
 65  integer, parameter :: fnlen=264                        ! maximum length of file name variables
 66  integer, parameter :: strlen=2000000                   ! maximum length of input string
 67 
 68 !UNIX unit numbers
 69 !-----------------------------------------------
 70  integer, save      :: ab_out= 7                        ! output file
 71  integer, save      :: std_out=6                        ! standard output
 72  integer, parameter :: std_err=0                        ! standard error
 73  integer, parameter :: tmp_unit=9,tmp_unit2=10          ! units for temporary files
 74 
 75 !Real physical constants
 76 !-----------------------------------------------
 77  real(dp), parameter :: Bohr_Ang=0.52917720859_dp       ! 1 Bohr, in Angstrom
 78  real(dp), parameter :: Ha_eV=27.21138386_dp            ! 1 Hartree, in eV
 79  real(dp), parameter :: InvFineStruct=137.035999679_dp  ! Inverse of fine structure constant
 80  real(dp), parameter :: FineStructureConstant2=0.000053251354478_dp ! Square of fine structure
 81 
 82 !A collection of small datatypes for ragged arrays
 83 !-----------------------------------------------
 84  type coeffi1_type                    !A small datatype for ragged integer 1D-arrays
 85   integer, allocatable :: value(:) 
 86  end type coeffi1_type
 87  type coeff1_type                     !A small datatype for ragged real 1D-arrays
 88   real(dp), allocatable :: value(:) 
 89  end type coeff1_type
 90  type coeff2_type                     !A small datatype for ragged real 2D-arrays
 91   real(dp), allocatable :: value(:,:)  
 92  end type coeff2_type
 93  type coeff3_type                     !A small datatype for ragged real 3D-arrays
 94   real(dp), allocatable :: value(:,:,:) 
 95  end type coeff3_type
 96 
 97 !Small functions used in cpp macros
 98 !-----------------------------------------------
 99  public :: to_array
100  interface to_array
101   module procedure to_array1
102   module procedure to_array2
103   module procedure to_array3
104   module procedure to_array4
105   module procedure to_array5
106   module procedure to_array6
107  end interface to_array
108 
109  contains
110 
111  function to_array1(i1) result(arr)
112 
113   integer :: i1,arr(1)
114   arr=(/i1/)
115  end function to_array1
116 
117  function to_array2(i1,i2) result(arr)
118 
119   integer :: i1,i2,arr(2)
120   arr=(/i1,i2/)
121  end function to_array2
122 
123  function to_array3(i1,i2,i3) result(arr)
124 
125   integer :: i1,i2,i3,arr(3)
126   arr=(/i1,i2,i3/)
127  end function to_array3
128 
129  function to_array4(i1,i2,i3,i4) result(arr)
130 
131   integer :: i1,i2,i3,i4,arr(4)
132   arr=(/i1,i2,i3,i4/)
133  end function to_array4
134 
135  function to_array5(i1,i2,i3,i4,i5) result(arr)
136 
137   integer :: i1,i2,i3,i4,i5,arr(5)
138   arr=(/i1,i2,i3,i4,i5/)
139  end function to_array5
140 
141  function to_array6(i1,i2,i3,i4,i5,i6) result(arr)
142 
143   integer :: i1,i2,i3,i4,i5,i6,arr(6)
144   arr=(/i1,i2,i3,i4,i5,i6/)
145  end function to_array6
146 
147 end module m_libpaw_defs