82 integer,
intent(in) :: nn
83 integer,
intent(inout) :: n_divisors
84 integer,
intent(out) :: divisors(:)
90 assert(n_divisors > 1)
94 divisors(n_divisors) = 1
96 if (mod(nn, ii) == 0)
then
97 n_divisors = n_divisors + 1
99 if (n_divisors > max_d - 1)
then
100 message(1) =
"Internal error in get_divisors. Please increase n_divisors"
104 divisors(n_divisors) = ii
107 n_divisors = n_divisors + 1
108 divisors(n_divisors) = nn
115 character pure function index2axis(idir) result(ch)
116 integer,
intent(in) :: idir
128 write(ch,
'(i1)') idir
135 integer,
intent(in) :: idir
136 character(len=2) :: ch
148 write(ch,
'(i2)') idir
155 subroutine output_tensor(tensor, ndim, unit, write_average, iunit, namespace)
156 real(real64),
intent(in) :: tensor(:,:)
157 integer,
intent(in) :: ndim
158 type(unit_t),
intent(in) :: unit
159 logical,
optional,
intent(in) :: write_average
160 integer,
optional,
intent(in) :: iunit
161 type(namespace_t),
optional,
intent(in) :: namespace
163 real(real64) :: trace
165 logical :: write_average_
169 write_average_ = optional_default(write_average, .
true.)
175 write(message(1),
'(a,f20.6)') trim(message(1)), units_from_atomic(unit, tensor(jj, kk))
177 trace = trace + tensor(jj, jj)
178 call messages_info(1, iunit=iunit, namespace=namespace)
181 if (write_average_)
then
182 write(message(1),
'(a, f20.6)')
'Isotropic average', units_from_atomic(unit, trace/real(ndim, real64) )
183 call messages_info(1, iunit=iunit, namespace=namespace)
192 real(real64),
contiguous,
intent(in) :: dipole(:)
193 integer,
intent(in) :: ndim
194 integer,
optional,
intent(in) :: iunit
195 type(namespace_t),
optional,
intent(in) :: namespace
201 write(message(1),
'(a,a20,a17)')
'Dipole:',
'[' // trim(units_abbrev(units_out%length)) //
']', &
202 '[' // trim(units_abbrev(unit_debye)) //
']'
204 write(message(1+idir),
'(6x,3a,es14.5,3x,2es14.5)')
'<',
index2axis(idir),
'> = ', &
205 units_from_atomic(units_out%length, dipole(idir)), units_from_atomic(unit_debye, dipole(idir))
207 call messages_info(1+ndim, iunit=iunit, namespace=namespace)
217 character(len=256) :: sys_name
220 call io_dump_file(stdout, trim(trim(conf%share) //
'/logo'))
224 message(2) = str_center(
"Running octopus", 70)
226 call messages_info(3)
229 "Version : " // trim(conf%version)
231 "Commit : "// trim(conf%git_commit)
233 "Configuration time : "// trim(conf%config_time)
234 call messages_info(3)
239 message(3) =
'Architecture : ' + tostring(oct_arch)
240 call messages_info(3)
245 "C compiler : "//trim(conf%cc)
247 "C compiler flags : "//trim(conf%cflags)
249 "C++ compiler : "//trim(conf%cxx)
251 "C++ compiler flags : "//trim(conf%cxxflags)
252#ifdef HAVE_FC_COMPILER_VERSION
253 message(5) =
"Fortran compiler : "//trim(conf%fc) //
" ("//compiler_version()//
")"
255 message(5) =
"Fortran compiler : "//trim(conf%fc)
258 "Fortran compiler flags : "//trim(conf%fcflags)
259 call messages_info(6)
262 call messages_info(1)
265 call loct_sysname(sys_name)
266 write(message(1),
'(a)')
"The octopus is swimming in " // trim(sys_name)
268 call messages_info(2)
270 call mpi_world%barrier()
272 call print_date(
"Calculation started on ")
297#ifdef HAVE_LIBXC_FUNCS
300#ifdef HAVE_LIBXC_DEVICE
306#ifdef HAVE_FFTW3_THREADS
328#ifdef HAVE_BERKELEYGW
346#ifdef HAVE_LIBVDWXC_MPI
397 real(real64),
target,
intent(in) :: array(:, :)
399 integer(c_intptr_t) :: addr1, addr2
403 if (ubound(array, dim = 2) > 1)
then
404 addr1 = transfer(c_loc(array(1,1)), 0_c_intptr_t)
405 addr2 = transfer(c_loc(array(1,2)), 0_c_intptr_t)
406 known = ubound(array, dim = 1) == (addr2-addr1)/c_sizeof(array(1, 1))
415 complex(real64),
target,
intent(in) :: array(:, :)
417 integer(c_intptr_t) :: addr1, addr2
421 if (ubound(array, dim = 2) > 1)
then
422 addr1 = transfer(c_loc(array(1,1)), 0_c_intptr_t)
423 addr2 = transfer(c_loc(array(1,2)), 0_c_intptr_t)
424 known = ubound(array, dim = 1) == (addr2-addr1)/c_sizeof(array(1, 1))
432 integer,
target,
intent(in) :: array(:, :)
434 integer(c_intptr_t) :: addr1, addr2
438 if (ubound(array, dim = 2) > 1)
then
439 addr1 = transfer(c_loc(array(1,1)), 0_c_intptr_t)
440 addr2 = transfer(c_loc(array(1,2)), 0_c_intptr_t)
442 known = ubound(array, dim = 1) == (addr2-addr1)/c_sizeof(array(1, 1))
449 integer(int64),
target,
intent(in) :: array(:, :)
451 integer(c_intptr_t) :: addr1, addr2
455 if (ubound(array, dim = 2) > 1)
then
456 addr1 = transfer(c_loc(array(1,1)), 0_c_intptr_t)
457 addr2 = transfer(c_loc(array(1,2)), 0_c_intptr_t)
459 known = ubound(array, dim = 1) == (addr2-addr1)/c_sizeof(array(1, 1))
468 real(real32),
target,
intent(in) :: array(:, :)
470 integer(c_intptr_t) :: addr1, addr2
474 if (ubound(array, dim = 2) > 1)
then
475 addr1 = transfer(c_loc(array(1,1)), 0_c_intptr_t)
476 addr2 = transfer(c_loc(array(1,2)), 0_c_intptr_t)
477 known = ubound(array, dim = 1) == (addr2-addr1)/c_sizeof(array(1, 1))
486 complex(real32),
target,
intent(in) :: array(:, :)
488 integer(c_intptr_t) :: addr1, addr2
492 if (ubound(array, dim = 2) > 1)
then
493 addr1 = transfer(c_loc(array(1,1)), 0_c_intptr_t)
494 addr2 = transfer(c_loc(array(1,2)), 0_c_intptr_t)
495 known = ubound(array, dim = 1) == (addr2-addr1)/c_sizeof(array(1, 1))
504 real(real64),
target,
intent(in) :: array(:, :, :)
506 integer(c_intptr_t) :: addr1, addr2
510 if (ubound(array, dim = 2) > 1)
then
511 addr1 = transfer(c_loc(array(1,1,1)), 0_c_intptr_t)
512 addr2 = transfer(c_loc(array(1,2,1)), 0_c_intptr_t)
513 known = ubound(array, dim = 1) == (addr2 - addr1)/c_sizeof(array(1, 1, 1))
522 complex(real64),
target,
intent(in) :: array(:, :, :)
524 integer(c_intptr_t) :: addr1, addr2
528 if (ubound(array, dim = 2) > 1)
then
529 addr1 = transfer(c_loc(array(1,1,1)), 0_c_intptr_t)
530 addr2 = transfer(c_loc(array(1,2,1)), 0_c_intptr_t)
531 known = ubound(array, dim = 1) == (addr2 - addr1)/c_sizeof(array(1, 1, 1))
539 integer,
target,
intent(in) :: array(:, :, :)
541 integer(c_intptr_t) :: addr1, addr2
545 if (ubound(array, dim = 2) > 1)
then
546 addr1 = transfer(c_loc(array(1,1,1)), 0_c_intptr_t)
547 addr2 = transfer(c_loc(array(1,2,1)), 0_c_intptr_t)
548 known = ubound(array, dim = 1) == (addr2 - addr1)/c_sizeof(array(1, 1, 1))
555 integer(int64),
target,
intent(in) :: array(:, :, :)
557 integer(c_intptr_t) :: addr1, addr2
561 if (ubound(array, dim = 2) > 1)
then
562 addr1 = transfer(c_loc(array(1,1,1)), 0_c_intptr_t)
563 addr2 = transfer(c_loc(array(1,2,1)), 0_c_intptr_t)
564 known = ubound(array, dim = 1) == (addr2 - addr1)/c_sizeof(array(1, 1, 1))
572 real(real32),
target,
intent(in) :: array(:, :, :)
574 integer(c_intptr_t) :: addr1, addr2
578 if (ubound(array, dim = 2) > 1)
then
579 addr1 = transfer(c_loc(array(1,1,1)), 0_c_intptr_t)
580 addr2 = transfer(c_loc(array(1,2,1)), 0_c_intptr_t)
581 known = ubound(array, dim = 1) == (addr2 - addr1)/c_sizeof(array(1, 1, 1))
589 complex(real32),
target,
intent(in) :: array(:, :, :)
591 integer(c_intptr_t) :: addr1, addr2
595 if (ubound(array, dim = 2) > 1)
then
596 addr1 = transfer(c_loc(array(1,1,1)), 0_c_intptr_t)
597 addr2 = transfer(c_loc(array(1,2,1)), 0_c_intptr_t)
598 known = ubound(array, dim = 1) == (addr2 - addr1)/c_sizeof(array(1, 1, 1))
605 integer function dlead_dim(array)
result(lead_dim)
606 real(real64),
intent(in) :: array(:, :)
615 integer function zlead_dim(array)
result(lead_dim)
616 complex(real64),
intent(in) :: array(:, :)
625 integer function dlead_dim2(array)
result(lead_dim)
626 real(real64),
intent(in) :: array(:, :, :)
630 lead_dim = ubound(array, dim = 1) * ubound(array, dim = 2)
635 integer function zlead_dim2(array)
result(lead_dim)
636 complex(real64),
intent(in) :: array(:, :, :)
640 lead_dim = ubound(array, dim = 1) * ubound(array, dim = 2)
645 integer function slead_dim(array)
result(lead_dim)
646 real(real32),
intent(in) :: array(:, :)
655 integer function clead_dim(array)
result(lead_dim)
656 complex(real32),
intent(in) :: array(:, :)
665 integer function slead_dim2(array)
result(lead_dim)
666 real(real32),
intent(in) :: array(:, :, :)
670 lead_dim = ubound(array, dim = 1) * ubound(array, dim = 2)
675 integer function clead_dim2(array)
result(lead_dim)
676 complex(real32),
intent(in) :: array(:, :, :)
680 lead_dim = ubound(array, dim = 1) * ubound(array, dim = 2)
684 integer(int64),
allocatable,
intent(inout) :: array(:)
685 integer,
intent(in) :: new_size
687 integer(int64),
allocatable :: tmp(:)
693 allocate(tmp(1:new_size))
694 copy_size = min(new_size,
size(array))
695 tmp(1:copy_size) = array(1:copy_size)
696 safe_deallocate_a(array)
697 call move_alloc(tmp, array)
704 character(len=32) :: vec
705 character(kind=c_char) :: c_str(33)
709 call string_c_to_f(c_str, vec)
710 message(1) =
'Vectorization level : ' // trim(vec)
711 call messages_info(1)
System information (time, memory, sysname)
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
This module contains interfaces for routines in operate.c.
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
This module defines the unit system, used for input and output.
This module is intended to contain simple general-purpose utility functions and procedures.
subroutine, public output_tensor(tensor, ndim, unit, write_average, iunit, namespace)
character(len=256) function, public get_config_opts()
Character string containing compile-time options.
logical function cleading_dimension_is_known(array)
integer function zlead_dim2(array)
subroutine write_vectorization_level()
Prints the level of vectorization used for the vectorized finite differences.
subroutine, public output_dipole(dipole, ndim, iunit, namespace)
logical function zleading_dimension_is_known2(array)
logical function lleading_dimension_is_known(array)
logical function zleading_dimension_is_known(array)
subroutine, public get_divisors(nn, n_divisors, divisors)
integer function dlead_dim(array)
subroutine, public make_array_larger(array, new_size)
integer function clead_dim(array)
logical function dleading_dimension_is_known2(array)
character(len=256) function, public get_optional_libraries()
Character string containing optional external libraries.
logical function ileading_dimension_is_known(array)
integer function dlead_dim2(array)
integer function slead_dim2(array)
logical function cleading_dimension_is_known2(array)
character pure function, public index2axis(idir)
integer function clead_dim2(array)
logical function lleading_dimension_is_known2(array)
integer function slead_dim(array)
logical function ileading_dimension_is_known2(array)
logical function sleading_dimension_is_known(array)
pure character(len=2) function, public index2axisbz(idir)
subroutine, public print_header()
This subroutine prints the logo followed by information about the compilation and the system....
logical function sleading_dimension_is_known2(array)
integer function zlead_dim(array)
logical function dleading_dimension_is_known(array)
void get_vectorization_level(char *level)