forked from fortran-lang/stdlib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstdlib_constants.fypp
75 lines (70 loc) · 4.56 KB
/
stdlib_constants.fypp
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#:include "common.fypp"
#:set KINDS = REAL_KINDS
#:set R_KINDS_TYPES = list(zip(REAL_KINDS, REAL_TYPES, REAL_SUFFIX))
#:set C_KINDS_TYPES = list(zip(CMPLX_KINDS, CMPLX_TYPES, CMPLX_SUFFIX))
module stdlib_constants
!! Constants
!! ([Specification](../page/specs/stdlib_constants.html))
use stdlib_kinds, only: #{for k in KINDS[:-1]}#${k}$, #{endfor}#${KINDS[-1]}$
use stdlib_codata, only: SPEED_OF_LIGHT_IN_VACUUM, &
VACUUM_ELECTRIC_PERMITTIVITY, &
VACUUM_MAG_PERMEABILITY, &
PLANCK_CONSTANT, &
NEWTONIAN_CONSTANT_OF_GRAVITATION, &
STANDARD_ACCELERATION_OF_GRAVITY, &
ELEMENTARY_CHARGE, &
MOLAR_GAS_CONSTANT, &
FINE_STRUCTURE_CONSTANT, &
AVOGADRO_CONSTANT, &
BOLTZMANN_CONSTANT, &
STEFAN_BOLTZMANN_CONSTANT, &
WIEN_WAVELENGTH_DISPLACEMENT_LAW_CONSTANT, &
RYDBERG_CONSTANT, &
ELECTRON_MASS, &
PROTON_MASS, &
NEUTRON_MASS, &
ATOMIC_MASS_CONSTANT
private
! mathematical constants
#:for k in KINDS
real(${k}$), parameter, public :: PI_${k}$ = acos(-1.0_${k}$) !! PI
#:endfor
! Physical constants
real(dp), parameter, public :: c = SPEED_OF_LIGHT_IN_VACUUM%value !! Speed of light in vacuum
real(dp), parameter, public :: speed_of_light = SPEED_OF_LIGHT_IN_VACUUM%value !! Speed of light in vacuum
real(dp), parameter, public :: mu_0 = VACUUM_MAG_PERMEABILITY%value !! vacuum mag. permeability
real(dp), parameter, public :: epsilon_0 = VACUUM_ELECTRIC_PERMITTIVITY%value !! vacuum mag. permeability
real(dp), parameter, public :: h = PLANCK_CONSTANT%value !! Planck constant
real(dp), parameter, public :: Planck = PLANCK_CONSTANT%value !! Planck constant
real(dp), parameter, public :: hbar = PLANCK_CONSTANT%value / PI_dp !! Reduced Planck constant
real(dp), parameter, public :: G = NEWTONIAN_CONSTANT_OF_GRAVITATION%value !! Newtonian constant of gravitation
real(dp), parameter, public :: gravitation_constant = NEWTONIAN_CONSTANT_OF_GRAVITATION%value !! Newtonian constant of gravitation
real(dp), parameter, public :: g2 = STANDARD_ACCELERATION_OF_GRAVITY%value !! Standard acceleration of gravity
real(dp), parameter, public :: e = ELEMENTARY_CHARGE%value !! Elementary charge
real(dp), parameter, public :: R = MOLAR_GAS_CONSTANT%value !! Molar gas constant
real(dp), parameter, public :: gas_constant = MOLAR_GAS_CONSTANT%value !! Molar gas constant
real(dp), parameter, public :: alpha = FINE_STRUCTURE_CONSTANT%value !! Fine structure constant
real(dp), parameter, public :: fine_structure = FINE_STRUCTURE_CONSTANT%value !! Fine structure constant
real(dp), parameter, public :: N_A = AVOGADRO_CONSTANT%value !! Avogadro constant
real(dp), parameter, public :: Avogadro = AVOGADRO_CONSTANT%value !! Avogadro constant
real(dp), parameter, public :: k = BOLTZMANN_CONSTANT%value !! Boltzmann constant
real(dp), parameter, public :: Boltzmann = BOLTZMANN_CONSTANT%value !! Boltzmann constant
real(dp), parameter, public :: sigma = STEFAN_BOLTZMANN_CONSTANT%value !! Stefan-Boltzmann constant
real(dp), parameter, public :: Stefan_Boltzmann = STEFAN_BOLTZMANN_CONSTANT%value !! Stefan-Boltzmann constant
real(dp), parameter, public :: Wien = WIEN_WAVELENGTH_DISPLACEMENT_LAW_CONSTANT%value !! Wien wavelength displacement law constant
real(dp), parameter, public :: Rydberg = RYDBERG_CONSTANT%value !! Rydberg constant
real(dp), parameter, public :: m_e = ELECTRON_MASS%value !! Electron mass
real(dp), parameter, public :: m_p = PROTON_MASS%value !! Proton mass
real(dp), parameter, public :: m_n = NEUTRON_MASS%value !! Neutron mass
real(dp), parameter, public :: m_u = ATOMIC_MASS_CONSTANT%value !! Atomic mass constant
real(dp), parameter, public :: u = ATOMIC_MASS_CONSTANT%value !! Atomic mass constant
! Additional constants if needed
#:for k, t, s in R_KINDS_TYPES
${t}$, parameter, public :: zero_${s}$ = 0._${k}$
${t}$, parameter, public :: one_${s}$ = 1._${k}$
#:endfor
#:for k, t, s in C_KINDS_TYPES
${t}$, parameter, public :: zero_${s}$ = (0._${k}$,0._${k}$)
${t}$, parameter, public :: one_${s}$ = (1._${k}$,0._${k}$)
#:endfor
end module stdlib_constants