73bd010458
Only a single `implicit none` at the start of each module is required.
65 lines
3.6 KiB
Fortran
65 lines
3.6 KiB
Fortran
module const_and_precisions
|
|
|
|
implicit none
|
|
|
|
public
|
|
|
|
!------------------------------------------------------------------------
|
|
! Common precisions
|
|
!------------------------------------------------------------------------
|
|
integer, parameter :: i4 = selected_int_kind (9) ! Integer*4
|
|
integer, parameter :: i8 = selected_int_kind (18) ! Integer*8
|
|
integer, parameter :: r4 = selected_real_kind (6, 37) ! Real*4
|
|
integer, parameter :: r8 = selected_real_kind (15, 300) ! Real*8
|
|
integer, parameter :: wp_ = r8 ! Work precision
|
|
|
|
!------------------------------------------------------------------------
|
|
! Arithmetic constants
|
|
!------------------------------------------------------------------------
|
|
integer, parameter :: izero = 0 ! Integer 0
|
|
real(wp_), parameter :: zero = 0.0_wp_ ! Real 0
|
|
real(wp_), parameter :: half = 0.5_wp_ ! Real 1/2
|
|
real(wp_), parameter :: one = 1.0_wp_ ! Real 1
|
|
real(wp_), parameter :: two = 2.0_wp_ ! Real 2
|
|
real(wp_), parameter :: pi = 3.141592653589793_wp_ ! pi
|
|
real(wp_), parameter :: pihalf = 1.57079632679489661923_wp_ ! pi/2
|
|
real(wp_), parameter :: sqrt_pi = 1.772453850905516_wp_ ! sqrt(pi)
|
|
real(wp_), parameter :: degree = pi/180.0_wp_ ! 1° = pi/180
|
|
real(wp_), parameter :: emn1 = 0.367879441171442_wp_ ! exp(-1)
|
|
complex(wp_), parameter :: im = (0.0_wp_,1.0_wp_) ! Imaginary unit
|
|
complex(wp_), parameter :: czero = (0.0_wp_,0.0_wp_) ! Complex zero
|
|
complex(wp_), parameter :: cunit = (1.0_wp_,0.0_wp_) ! Complex one
|
|
|
|
!------------------------------------------------------------------------
|
|
! Computer constants
|
|
!------------------------------------------------------------------------
|
|
real(wp_), parameter :: comp_eps = epsilon(one) ! Smallest number larger than 1
|
|
real(wp_), parameter :: comp_tiny = tiny(one) ! Smallest positive number
|
|
real(wp_), parameter :: comp_huge = huge(one) ! Largest positive number
|
|
|
|
!------------------------------------------------------------------------
|
|
! Physical constants (SI)
|
|
!------------------------------------------------------------------------
|
|
real (wp_), parameter :: e_ = 1.602176487e-19_wp_ ! Elementary charge, C
|
|
real (wp_), parameter :: me_ = 9.10938215e-31_wp_ ! Electron mass, kg
|
|
real (wp_), parameter :: c_ = 2.99792458e8_wp_ ! Speed of light, m/s
|
|
real (wp_), parameter :: mu0_ = 4.0e-7_wp_ * pi ! Magnetic permeability of vacuum, H/m
|
|
|
|
!------------------------------------------------------------------------
|
|
! Physical constants (CGS)
|
|
!------------------------------------------------------------------------
|
|
real (wp_), parameter :: ccgs_ = c_*1.e2_wp_ ! Speed of light in a vacuum, cm/s
|
|
real (wp_), parameter :: mecgs_ = me_*1.e3_wp_ ! Electron mass, g
|
|
real (wp_), parameter :: ecgs_ = e_*c_*10._wp_ ! Elementary charge, statcoul
|
|
|
|
!------------------------------------------------------------------------
|
|
! Useful definitions
|
|
!------------------------------------------------------------------------
|
|
real(wp_), parameter :: kev_ = 1.e3_wp_*e_ ! 1 keV, J
|
|
real(wp_), parameter :: mc2_ = me_*c_**2/kev_ ! Electron rest energy, keV
|
|
real(wp_), parameter :: mu0inv = 1._wp_/mu0_ ! Inverse magnetic permeability of vacuum, m/H
|
|
real(wp_), parameter :: wce1_ = e_/me_ ! ECR (angular) frequency / magnetic field, rad/s/T
|
|
real(wp_), parameter :: cm = 0.01_wp_ ! Converts cm to m
|
|
|
|
end module const_and_precisions
|