h_artn_units

namespace h_artn_units

UNITS module contains all the tool to reconize the Engine and its units to convert the energy/force/length/time in atomic units Atomic Units (au) in plugin-ARTn is the Rydberg-bohr-aut.

Author

Matic Poberznik,

Author

Miha Gunde,

Author

Nicolas Salles

Centralize routines for convert and unconvret: Can be called for any real(DP),rank=0 variable name, will be properly converted according to <name>. NOTE: this could be made better to include flags for each variable, if it is already converted or not, to avoid error of converting multiple times.

Todo:

Change the unit philosophy: In principle ARTn could work whitout to convert the quantities.

Functions

pure logical function defined_int (val)
pure logical function defined_real (val)
pure logical function defined_str (val)
pure elemental logical function is_inf_int (val)
pure elemental logical function is_finite_int (val)
pure elemental logical function is_nan_int (val)
pure elemental logical function is_inf_real (val)
pure elemental logical function is_finite_real (val)
pure elemental logical function is_nan_real (val)
subroutine allocate_int1d(dim1, array, src_val)
subroutine allocate_int2d(dim1, dim2, array, src_val)
subroutine allocate_real1d(dim1, array, src_val)
subroutine allocate_real2d(dim1, dim2, array, src_val)
subroutine allocate_real3d(dim1, dim2, dim3, array, src_val)
subroutine allocate_str1d(dim1, strlen, array, src_val)
integer function, public lenstr_local (str)
integer function, public size_i1d (i1d)
integer function, public size_r1d (r1d)
integer function, public size_r2d (r2d, ax)

Variables

integer, parameter, public caller_is_engine   = 10
integer, parameter, public caller_is_api   = 20
integer, parameter, public nan_int   = huge( 1 )
real(dp), parameter, public nan_real   = HUGE( 1.0_DP )

Biggest number in DP representation.

character(len= *), parameter, public nan_str   = "BBBB"
real(dp), parameter, public eps   = epsilon(NAN_REAL)
real(dp), parameter, public pi   = 3.141592653589793_DP

@brief pi number

real(dp), parameter h_planck_si   = 6.62607015E-34_DP

@brief J s

real(dp), parameter k_boltzmann_si   = 1.380649E-23_DP

@brief J K^-1

real(dp), parameter electron_si   = 1.602176634E-19_DP

@brief C

real(dp), parameter electronvolt_si   = 1.602176634E-19_DP

@brief J

real(dp), parameter electronmass_si   = 9.1093837015E-31_DP

@brief Kg

real(dp), parameter hartree_si   = 4.3597447222071E-18_DP

@brief J

real(dp), parameter rydberg_si   = HARTREE_SI/2.0_DP

@brief J

real(dp), parameter bohr_radius_si   = 0.529177210903E-10_DP

@brief m

real(dp), parameter amu_si   = 1.66053906660E-27_DP

@brief Kg

real(dp), parameter c_si   = 2.99792458E+8_DP

@brief m sec^-1

real(dp), parameter na   = 6.022140857E+23_DP

@brief mol^-1

real(dp), parameter ry2ev   = 13.605691930242388_DP

@brief Ry to eV conversion

real(dp), parameter ry2kcal   = 5.2065348237317E-22_DP

@brief Ry to kcal conversion

real(dp), parameter ry2kj   = 2.17987197E-21_DP

@brief Ry to kJoules conversion

real(dp), parameter ry2kcalpmol   = RY2KCAL*NA

@brief Ry to kcal/mole conversion

real(dp), parameter ry2kjpmol   = RY2KJ*NA

@brief Ry to kJoules per mole conversion

real(dp), parameter, public b2a   = 0.529177210903_DP

@brief bohr to angstrom conversion

real(dp), parameter amu_ry2   = 911.4442431086564_DP

@brief calculated from QE using DP

real(dp), parameter ps2aut   = 41341.374575751_DP/2_DP

@brief picosecond to atomic unit of time

real(dp), parameter aut2s   = 4.8378E-17_DP

@brief atomic time to second (Ry atomic unit)

real(dp), parameter amu_au   = 1822.8884862173129_DP

@brief AMU_SI / ELECTRONMASS_SI Dimensionless Hartree

real(dp), parameter amu_ry   = 911.44421386718750_DP

@brief AMU_AU / 2.0_DP Dimensionless Rydberg

real(dp), parameter au_sec   = 4.83776865317143E-017_DP

@brief H_PLANCK_SI/(2.*pi)/RYDBERG_SI Atomic time to second

real(dp), parameter au_ps   = 4.83776865317143E-005_DP

@brief AU_SEC * 1.0E+12_DP Atomic time to picosecond

real(dp), parameter au_fs   = 4.83776865317143E-002_DP

AU_SEC * 1.0E+15_DP Atomic time to femtosecond.

character(*), parameter aa   = char(197)

Angstrom (ANSI code)

character(*), parameter to2   = "**2"

exponent 2

character(len=256), public strg_units

String containing the unit of the system with the output format.

real(dp), public, protected mass

Mass in Rydberg to buid the force - ARTn is in Rydberg (QE)

logical, public, protected units_are_set   = .false.

flag if the engine_units are known or not.

interface allocate_var

Private Functions

subroutine allocate_int1d(dim1, array, src_val)
subroutine allocate_int2d(dim1, dim2, array, src_val)
subroutine allocate_real1d(dim1, array, src_val)
subroutine allocate_real2d(dim1, dim2, array, src_val)
subroutine allocate_real3d(dim1, dim2, dim3, array, src_val)
subroutine allocate_str1d(dim1, strlen, array, src_val)
interface convert_param
interface defined_var

Private Functions

pure logical function defined_int (val)
pure logical function defined_real (val)
pure logical function defined_str (val)
interface is_finite

Private Functions

pure elemental logical function is_finite_int (val)
pure elemental logical function is_finite_real (val)
interface is_inf

Private Functions

pure elemental logical function is_inf_int (val)
pure elemental logical function is_inf_real (val)
interface is_nan

Private Functions

pure elemental logical function is_nan_int (val)
pure elemental logical function is_nan_real (val)
interface make_units
interface unconvert_param
interface unit_char