22 use,
intrinsic :: iso_c_binding, only: c_int
23 use,
intrinsic :: iso_fortran_env
58 use,
intrinsic :: iso_c_binding, only: c_int
59 integer(c_int),
intent(inout) :: major, minor, patch
60 integer(c_int) :: ierr
64 integer,
public,
parameter :: MAX_PATH_LEN=512
65 integer,
public,
parameter :: MAX_OUTPUT_TYPES=45
69 logical :: devel_version
70 logical :: report_memory
71 character(len=256) :: share = share_dir
72 character(len=256) :: build_dir = build_dir
73 character(len=256) :: git_commit = git_commit
74 character(len=50) :: config_time = build_time
75 character(len=20) :: version = package_version
76 character(len=256) :: cc = cc
77 character(len=256) :: cxx = cxx
78 character(len=256) :: fc = fc
80 character(len=256) :: cflags = &
83 character(len=256) :: cxxflags = &
86 character(len=512) :: fcflags = &
89 integer :: target_states_block_size = -1
95 type(conf_t),
public :: conf
97 real(real64),
public,
parameter :: R_SMALL = 1e-8_real64
100 real(real64),
public,
parameter :: R_MIN_ATOM_DIST = 1e-3_real64
103 real(real64),
public,
parameter :: M_Pi = 3.1415926535897932384626433832795029_real64
104 real(real64),
public,
parameter :: M_E = 2.7182818284590452353602874713526625_real64
105 real(real64),
public,
parameter :: M_ZERO = 0.0_real64
106 real(real64),
public,
parameter :: M_ONE = 1.0_real64
107 real(real64),
public,
parameter :: M_TWO = 2.0_real64
108 real(real64),
public,
parameter :: M_THREE = 3.0_real64
109 real(real64),
public,
parameter :: M_FOUR = 4.0_real64
110 real(real64),
public,
parameter :: M_FIVE = 5.0_real64
111 real(real64),
public,
parameter :: M_HALF = 0.5_real64
112 real(real64),
public,
parameter :: M_THIRD = m_one/m_three
113 real(real64),
public,
parameter :: M_TWOTHIRD = m_two/m_three
114 real(real64),
public,
parameter :: M_FOURTH = m_one/m_four
115 complex(real64),
public,
parameter :: M_z0 = (0.0_real64, 0.0_real64)
116 complex(real64),
public,
parameter :: M_z1 = (1.0_real64, 0.0_real64)
117 complex(real64),
public,
parameter :: M_z2 = (2.0_real64, 0.0_real64)
118 complex(real64),
public,
parameter :: M_z2I = (0.0_real64, 2.0_real64)
119 complex(real64),
public,
parameter :: M_zI = (0.0_real64, 1.0_real64)
121 real(real64),
public,
parameter :: M_EPSILON = epsilon(m_one)
122 real(real64),
public,
parameter :: M_TINY = tiny(m_one)
123 real(real64),
public,
parameter :: M_HUGE = huge(m_one)
124 real(real64),
public,
parameter :: M_MIN_EXP_ARG = -650_real64
125 real(real64),
public,
parameter :: M_MAX_EXP_ARG = 700_real64
126 real(real64),
public,
protected :: M_PINF
127 real(real64),
public,
protected :: M_NINF
128 real(real64),
public,
protected :: M_SNAN
129 real(real64),
public,
protected :: M_QNAN
132 real(real64),
public,
parameter :: M_MIN_OCC = 1.0e-10_real64
134 real(real64),
public,
parameter :: M_MIN_DENSITY = 1.0e-20_real64
136 real(real64),
public,
parameter :: M_DEGENERARY_THRESHOLD = 1.0e-6_real64
139 real(real64),
public,
parameter :: LMM_R_SINGLE_ATOM = 100.0_real64
142 real(real64),
public,
parameter :: P_a_B = 0.52917720859_real64
143 real(real64),
public,
parameter :: P_Ang = m_one / p_a_b
144 real(real64),
public,
parameter :: P_Ry = 13.60569193_real64
145 real(real64),
public,
parameter :: P_eV = m_one / p_ry
146 real(real64),
public,
parameter :: P_Kb = 8.617343e-5_real64/(m_two*p_ry)
147 real(real64),
public,
parameter :: P_c = 137.035999679_real64
149 real(real64),
public,
parameter :: P_g = 2.00231930436118_real64
150 real(real64),
public,
parameter :: P_PROTON_CHARGE = -1.0_real64
151 real(real64),
public,
parameter :: P_ep = m_one/(m_four*m_pi)
152 real(real64),
public,
parameter ::
p_mu = m_four*m_pi/(p_c**2)
155 integer,
public,
parameter :: &
164 integer,
public :: stderr, stdin, stdout
182 character(len=*),
public,
parameter ::
gs_dir =
"gs/"
183 character(len=*),
public,
parameter ::
td_dir =
"td/"
184 character(len=*),
public,
parameter ::
static_dir =
"static/"
185 character(len=*),
public,
parameter ::
em_resp_dir =
"em_resp/"
187 character(len=*),
public,
parameter ::
kdotp_dir =
"kdotp/"
188 character(len=*),
public,
parameter ::
vib_modes_dir =
"vib_modes/"
189 character(len=*),
public,
parameter ::
vdw_dir =
"vdw/"
190 character(len=*),
public,
parameter ::
casida_dir =
"casida/"
191 character(len=*),
public,
parameter ::
oct_dir =
"opt-control/"
192 character(len=*),
public,
parameter ::
pcm_dir =
"pcm/"
193 character(len=*),
public,
parameter ::
partition_dir =
"partition/"
194 character(len=*),
public,
parameter ::
iteration_dir =
"iteration/"
213 character(len=*),
intent(in) :: s,
f
214 integer,
intent(in) :: l
218 interface operator (+)
220 end interface operator (+)
243 character(len=MAX_PATH_LEN) :: share
244 character(len=MAX_PATH_LEN) :: path_exe, dir_exe
248 if (trim(share) /=
"")
then
249 this%share = trim(share)
254 if (trim(path_exe) /=
"")
then
257 share = trim(dir_exe) //
"/share"
259 this%share = trim(share)
265 write(*,
"(A)")
"Error: could not find share directory."
266 write(*,
"(A, A)")
"Configured location: ", trim(conf%share)
279 type(mpi_comm),
intent(in),
optional :: communicator
281 type(mpi_comm) :: comm
283 if (
present(communicator))
then
306 integer(c_int) :: ierr, major, minor, patch
315 error stop
"openblas_get_config failed to return a version"
317 if (ierr == 1 .and. major == 0 .and. minor == 3 .and. patch == 32)
then
318 error stop
"Octopus is linked to OpenBLAS 0.3.32, which is buggy"
336 type(mpi_comm),
intent(in) :: comm
338 character(len=256) :: path
359 path = trim(conf%share)//
'/varinfo'
363 use,
intrinsic :: ieee_arithmetic, only: &
367 ieee_signaling_nan, &
371 if (ieee_support_inf(m_pinf))
then
372 m_pinf = ieee_value(m_pinf, ieee_positive_inf)
374 m_pinf = huge(m_pinf)
376 if (ieee_support_inf(m_ninf))
then
377 m_ninf = ieee_value(m_ninf, ieee_negative_inf)
379 m_ninf = -huge(m_ninf)
381 if (ieee_support_nan(m_qnan))
then
382 m_qnan = ieee_value(m_qnan, ieee_quiet_nan)
384 m_qnan = real(0.0, kind(m_qnan))
386 if (ieee_support_nan(m_snan))
then
387 m_snan = ieee_value(m_snan, ieee_signaling_nan)
389 m_snan = real(0.0, kind(m_snan))
405 real(real64)
pure function doptional_default(opt, def) result(val)
406 real(real64),
optional,
intent(in) :: opt
407 real(real64),
intent(in) :: def
410 if (
present(opt)) val = opt
415 complex(real64) pure function zoptional_default(opt, def) result(val)
416 complex(real64),
optional,
intent(in) :: opt
417 complex(real64),
intent(in) :: def
420 if (
present(opt)) val = opt
425 integer pure function ioptional_default(opt, def) result(val)
426 integer,
optional,
intent(in) :: opt
427 integer,
intent(in) :: def
430 if (
present(opt)) val = opt
436 integer(int64),
optional,
intent(in) :: opt
437 integer(int64),
intent(in) :: def
440 if (
present(opt)) val = opt
446 logical,
optional,
intent(in) :: opt
447 logical,
intent(in) :: def
450 if (
present(opt)) val = opt
456 character(len=*),
optional,
intent(in) :: opt
457 character(len=*),
intent(in) :: def
460 if (
present(opt)) val = opt
481 function cat(str1, str2)
482 character(len=*),
intent(in) :: str1
483 character(len=*),
intent(in) :: str2
485 character(len=len(str1) + len(str2)) ::
cat
493 integer(int32),
intent(in) :: val1
494 integer(int64),
intent(in) :: val2
496 bitand48 = iand(int(val1, int64), val2)
502 integer(int64) pure function
bitand84(val1, val2)
503 integer(int64),
intent(in) :: val1
504 integer(int32),
intent(in) :: val2
506 bitand84 = iand(val1, int(val2, int64))
512 integer(int64) pure function
bitand88(val1, val2)
513 integer(int64),
intent(in) :: val1
514 integer(int64),
intent(in) :: val2
522 integer(int32) pure function
bitand44(val1, val2)
523 integer(int32),
intent(in) :: val1
524 integer(int32),
intent(in) :: val2
533 integer(int32),
intent(in) :: ii
541 integer(int64),
intent(in) :: ii
549 integer(int32),
intent(in) :: ii(:)
550 integer(int64) ::
i4_to_i8_1(lbound(ii, 1, kind=int64):ubound(ii, 1, kind=int64))
558 integer(int64),
intent(in) :: ii(:)
559 integer(int32) ::
i8_to_i4_1(lbound(ii, 1, kind=int64):ubound(ii, 1, kind=int64))
This function is defined in messages.F90.
Public types, variables and procedures.
character(len= *), parameter, public em_resp_fd_dir
integer(int32) pure function bitand44(val1, val2)
subroutine, public global_end()
Finalise parser varinfo file, and MPI.
pure integer(int32) function, dimension(lbound(ii, 1, kind=int64):ubound(ii, 1, kind=int64)) i8_to_i4_1(ii)
character(len= *), parameter, public gs_dir
integer(int64) pure function bitand88(val1, val2)
integer(int64) pure function i4_to_i8_0(ii)
character(len= *), parameter, public iteration_dir
integer, public s_epoch_sec
global epoch time (time at startup)
integer pure function ioptional_default(opt, def)
integer, public no_sub_stack
character(len= *), parameter, public casida_dir
integer, parameter, public rdmft
integer(int64), public global_sizeof
character(len= *), parameter, public pcm_dir
integer(int64) pure function bitand84(val1, val2)
real(real64), parameter, public p_mu
integer, parameter, public hartree_fock
character(len= *), parameter, public vib_modes_dir
character(len= *), parameter, public partition_dir
integer(int64) pure function loptional_default(opt, def)
character(len= *), parameter, public kdotp_dir
integer, parameter, public independent_particles
Theory level.
character(len=len(str1)+len(str2)) function cat(str1, str2)
type(mpi_comm), parameter, public serial_dummy_comm
Alias MPI_COMM_UNDEFINED for the specific use case of initialising Octopus utilities with no MPI supp...
subroutine, public init_octopus_globals(comm)
Initialise Octopus-specific global constants and files. This routine performs no initialisation calls...
real(real64), dimension(50), public time_stack
logical pure function, public not_in_openmp()
real(real64) pure function doptional_default(opt, def)
logical pure function looptional_default(opt, def)
integer, parameter, public generalized_kohn_sham_dft
integer, parameter, public kohn_sham_dft
integer(int32) pure function i8_to_i4_0(ii)
character(len=80), dimension(50), public sub_stack
The stack.
integer, public s_epoch_usec
character(len= *), parameter, public em_resp_dir
character(len=100), public global_alloc_errmsg
logical, public in_profiling_mode
Same for profiling mode.
integer, public global_alloc_err
subroutine global_check_openblas_version()
Check OpenBLAS version and terminate if Octopus is linked to version 0.3.32.
character(len=80) pure function soptional_default(opt, def)
character(len= *), parameter, public td_dir
pure integer(int64) function, dimension(lbound(ii, 1, kind=int64):ubound(ii, 1, kind=int64)) i4_to_i8_1(ii)
character(len= *), parameter, public static_dir
subroutine, public global_init(communicator)
Initialise Octopus.
complex(real64) pure function zoptional_default(opt, def)
subroutine conf_init(this)
Initialiser for conf_t.
integer, parameter, public hartree
character(len= *), parameter, public vdw_dir
character(len= *), parameter, public oct_dir
integer(int64) pure function bitand48(val1, val2)
type(hardware_t), public cpu_hardware
Global instance of CPU hardware specification.
type(cache_t), public default_l2
type(cache_t), public default_l1
Defaults covers common chip specification for (l1, l2) cache.
System information (time, memory, sysname)
subroutine, public loct_getenv(var, val)
subroutine, public loct_dirname(path, dir)
logical function, public loct_dir_exists(dirname)
character(kind=c_char, len=1) function, dimension(len_trim(f_string)+1), private string_f_to_c(f_string)
convert a Fortran string to a C string
subroutine, public loct_executable_path(fpath)
subroutine blacs_init()
Initialize BLACS to enable use of SCALAPACK.
subroutine check_threading_support(comm)
Check that the threading support of the MPI library is consistent with the requested support from Oct...
type(mpi_comm), parameter, public mpi_comm_undefined
used to indicate a communicator has not been initialized
type(mpi_grp_t), public mpi_world
subroutine mpi_grp_init(grp, comm)
Initialize MPI group instance.
subroutine mpi_init_comm(comm)
Wrapper for MPI_COMM_WORLD initialisation.
static double f(double w, void *p)
Build configuration type.