File size: 2,386 Bytes
9425aed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
! BOB Quantum Civilization Engine - Type Definitions
! Module: bob_kinds
! Purpose: Explicit kind parameters for portable numeric types
! Standard: Fortran 2018
! Compiler: GNU Fortran (gfortran)

module bob_kinds
    use, intrinsic :: iso_c_binding, only: c_int, c_int64_t, c_double, c_float, c_bool, c_char
    implicit none
    private
    
    ! Export C-compatible types
    public :: c_int, c_int64_t, c_double, c_float, c_bool, c_char
    
    ! Integer kinds
    integer, parameter, public :: i4 = c_int           ! 32-bit integer
    integer, parameter, public :: i8 = c_int64_t       ! 64-bit integer
    
    ! Real kinds
    integer, parameter, public :: sp = c_float         ! Single precision (32-bit)
    integer, parameter, public :: dp = c_double        ! Double precision (64-bit)
    
    ! Default working precision for quantum states
    integer, parameter, public :: wp = dp              ! Working precision = double
    
    ! Complex kinds
    integer, parameter, public :: cwp = wp             ! Complex working precision
    
    ! Logical kind
    integer, parameter, public :: lk = c_bool          ! Logical/boolean
    
    ! Character kind
    integer, parameter, public :: ck = c_char          ! Character
    integer, parameter, public :: i1 = 1              ! 1-byte integer (int8)
    
    ! Constants
    real(wp), parameter, public :: PI = 3.141592653589793238462643383279502884197_wp
    real(wp), parameter, public :: QUART = 0.25_wp
    real(wp), parameter, public :: HBAR = 1.054571817e-34_wp  ! Reduced Planck constant (J·s)
    real(wp), parameter, public :: ZERO = 0.0_wp
    real(wp), parameter, public :: ONE = 1.0_wp
    real(wp), parameter, public :: TWO = 2.0_wp
    real(wp), parameter, public :: HALF = 0.5_wp
    
    ! Complex constants
    complex(cwp), parameter, public :: CZERO = (0.0_wp, 0.0_wp)
    complex(cwp), parameter, public :: CONE = (1.0_wp, 0.0_wp)
    complex(cwp), parameter, public :: CI = (0.0_wp, 1.0_wp)  ! Imaginary unit
    
    ! Numerical tolerances
    real(wp), parameter, public :: TOL_NORM = 1.0e-10_wp      ! Normalization tolerance
    real(wp), parameter, public :: TOL_HERMITIAN = 1.0e-12_wp ! Hermiticity tolerance
    real(wp), parameter, public :: TOL_UNITARY = 1.0e-10_wp   ! Unitarity tolerance
    
end module bob_kinds

! Made with Bob