66  integer, 
parameter :: max_lines = 20
 
   67  character(len=256), 
dimension(max_lines), 
public :: message
 
   68  character(len=68),      
parameter, 
public :: hyphens = &
 
   69    '--------------------------------------------------------------------' 
   70  character(len=69),      
parameter, 
public :: shyphens = 
'*'//hyphens
 
   72  character(len=512), 
private :: msg
 
   74  character(len=64),  
private :: oct_status = 
'undefined' 
   76  type(sihash_t),     
private :: namespace_unit
 
   77  type(sphash_t),     
private :: namespace_mpi_grp
 
   78  character(len=256), 
private :: msg_dir = 
'exec' 
  110  integer :: experimentals
 
  111  integer :: current_line
 
  125    character(len=*), 
intent(in), 
optional :: output_dir
 
  127    logical :: trap_signals
 
  129    if (
present(output_dir)) 
then 
  130      msg_dir = trim(output_dir)
 
  184      if (experimentals > 0 .or. warnings > 0) 
then 
  190      if (warnings > 0) 
then 
  193        if (warnings > 1) 
then 
  201      if (experimentals > 0) 
then 
  205        if (experimentals > 1) 
then 
  212        call messages_write(
'  Since you used one or more experimental features, results are likely')
 
  214        call messages_write(
'  wrong and should not  be considered as valid scientific data.  Check')
 
  217        call messages_write(
'  https://www.octopus-code.org/documentation/main/variables/execution/debug/experimentalfeatures')
 
  220        call messages_write(
'  or contact the octopus developers for details.')
 
  225      open(unit = 
iunit_out, file = trim(msg_dir) // 
'/messages', action = 
'write')
 
  226      write(
iunit_out, 
'(a, i9)') 
"warnings          = ", warnings
 
  227      write(
iunit_out, 
'(a, i9)') 
"experimental      = ", experimentals
 
  232    call it%start(namespace_unit)
 
  233    do while(it%has_next())
 
  235      if (iu /= stderr .and. iu /= stdout) 
call io_close(iu)
 
  245    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  249    if (
present(namespace)) 
then 
  251      if (namespace%get()==
"") 
then 
  256      iunit = 
sihash_lookup( namespace_unit, namespace%get(), found)
 
  258      if (.not. found) 
then 
  260        iunit = 
io_open(
"log", namespace=namespace, action=
"write")
 
  273    type(
mpi_grp_t),   
target, 
intent(in) :: mpigrp
 
  276    assert(namespace_mpi_grp%is_associated())
 
  283    type(
namespace_t), 
optional, 
intent(in)  :: namespace
 
  286    class(*), 
pointer :: value
 
  289    if (
present(namespace)) 
then 
  291      assert(namespace_mpi_grp%is_associated())
 
  293      value => 
sphash_lookup(namespace_mpi_grp, trim(namespace%get()), found)
 
  304        write(message(1),*) 
"Cannot get mpi_grp for namespace ",namespace%get()
 
  315    integer,           
optional, 
intent(in) :: no_lines
 
  316    logical,           
optional, 
intent(in) :: only_root_writes
 
  317    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  320    integer :: ii, no_lines_
 
  321    logical :: only_root_writes_, should_write
 
  322    integer, 
allocatable :: recv_buf(:)
 
  323    type(mpi_request), 
allocatable :: recv_req(:)
 
  325    integer, 
parameter :: fatal_tag = 32767
 
  327    type(mpi_request) :: send_req
 
  330    no_lines_ = current_line
 
  331    if (
present(no_lines)) no_lines_ = no_lines
 
  335    if (
present(only_root_writes)) 
then 
  336      should_write = msg_mpi_grp%is_root() .or. (.not. only_root_writes)
 
  337      only_root_writes_ = only_root_writes
 
  340      only_root_writes_ = .false.
 
  349    if (.not. only_root_writes_) 
then 
  350      if (msg_mpi_grp%is_root()) 
then 
  356          call mpi_recv_init(recv_buf(ii), 1, mpi_integer, ii, fatal_tag, msg_mpi_grp%comm, recv_req(ii))
 
  365        call mpi_send_init(1, 1, mpi_integer, 0, fatal_tag, msg_mpi_grp%comm, send_req)
 
  370        call mpi_test(send_req, received, mpi_status_ignore)
 
  372        should_write = .false.
 
  386    write(msg, 
'(a)') 
'*** Fatal Error (description follows)' 
  389    if (
present(namespace)) 
then 
  390      if (len_trim(namespace%get()) > 0) 
then 
  391        write(msg, 
'(3a)') 
'* In namespace ', trim(namespace%get()), 
':' 
  397    if (.not. only_root_writes_ .or. .not. msg_mpi_grp%is_root()) 
then 
  399      write(msg, 
'(a,i4)') 
"* From node = ", msg_mpi_grp%rank
 
  405      write(msg, 
'(a,1x,a)') 
'*', trim(message(ii))
 
  412    if (
debug%trace) 
then 
  415      write(msg, 
'(a)') 
'* Stack: ' 
  418        write(msg, 
'(a,a)') 
' > ', trim(
sub_stack(ii))
 
  424    if (should_write) 
then 
  437    integer,           
optional, 
intent(in) :: no_lines
 
  438    logical,           
optional, 
intent(in) :: all_nodes
 
  439    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  441    integer :: il, no_lines_
 
  442    integer :: iunit_namespace
 
  443    logical :: have_to_write, all_nodes_
 
  446    no_lines_ = current_line
 
  447    if (
present(no_lines)) no_lines_ = no_lines
 
  449    warnings = warnings + 1
 
  454    have_to_write = msg_mpi_grp%is_root()
 
  457    if (
present(all_nodes)) 
then 
  458      have_to_write = have_to_write .or. all_nodes
 
  459      all_nodes_ = all_nodes
 
  462    if (have_to_write) 
then 
  465      if (iunit_namespace /= stdout) 
then 
  468      write(msg, 
'(a)') 
'** Warning:' 
  470      if (iunit_namespace /= stdout) 
then 
  474      if (
present(namespace)) 
then 
  475        if (len_trim(namespace%get()) > 0) 
then 
  476          write(msg, 
'(3a)') 
'** In namespace ', trim(namespace%get()), 
':' 
  483        write(msg , 
'(a,i4)') 
'** From node = ', 
mpi_world%rank
 
  485        if (iunit_namespace /= stdout) 
then 
  492        write(msg , 
'(a,3x,a)') 
'**', trim(message(il))
 
  494        if (iunit_namespace /= stdout) 
then 
  499      if (iunit_namespace /= stdout) 
then 
  504      if (iunit_namespace /= stdout) 
then 
  505        flush(iunit_namespace)
 
  515  subroutine messages_info(no_lines, iunit, debug_only, stress, all_nodes, namespace)
 
  516    integer,           
optional, 
intent(in) :: no_lines
 
  517    integer,           
optional, 
intent(in) :: iunit
 
  518    logical,           
optional, 
intent(in) :: debug_only
 
  519    logical,           
optional, 
intent(in) :: stress
 
  520    logical,           
optional, 
intent(in) :: all_nodes
 
  521    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  523    integer :: il, no_lines_
 
  527    assert(.not. (
present(iunit) .and. 
present(namespace)))
 
  529    if (
present(iunit)) 
then 
  536    if (.not. msg_mpi_grp%is_root() .and. .not. 
optional_default(all_nodes, .false.)) 
then 
  541    no_lines_ = current_line
 
  542    if (
present(no_lines)) no_lines_ = no_lines
 
  544    if (
present(stress)) 
then 
  550        write(msg, 
'(a)') trim(message(il))
 
  554    if (
present(stress)) 
then 
  567    character(len=*), 
intent(in) :: status
 
  573    call loct_rm(trim(msg_dir) // 
'/oct-status-running')
 
  574    call loct_rm(trim(msg_dir) // 
'/oct-status-finished')
 
  575    call loct_rm(trim(msg_dir) // 
'/oct-status-aborted')
 
  576    if (oct_status /= 
'walltimer-aborted') 
then 
  577      call loct_rm(trim(msg_dir) // 
'/oct-status-walltimer-aborted')
 
  583    open(unit=
iunit_err, file=trim(msg_dir) // 
'/oct-status-'//trim(status), &
 
  584      action=
'write', status=
'unknown')
 
  591    integer(int64),      
intent(in) :: size
 
  592    character(len=*), 
intent(in) :: file
 
  593    integer,          
intent(in) :: line
 
  595    write(message(1), 
'(a,i18,3a,i5)') 
"Failed to allocate ", 
size, 
" words in file '", trim(file), 
"' line ", line
 
  602    integer(int64),      
intent(in) :: size
 
  603    character(len=*), 
intent(in) :: file
 
  604    integer,          
intent(in) :: line
 
  606    write(message(1), 
'(a,i18,3a,i5)') 
"Failed to deallocate array of ", 
size, 
" words in file '", trim(file), 
"' line ", line
 
  614    character(len=*),           
intent(in) :: var
 
  615    character(len=*), 
optional, 
intent(in) :: details
 
  616    integer,          
optional, 
intent(in) :: row
 
  617    integer,          
optional, 
intent(in) :: column
 
  619    character(len=10) :: row_str, column_str
 
  621    call messages_write(
'Input error in the input variable '// trim(var))
 
  623    if (
present(row)) 
then 
  627      write(row_str, 
'(I10)') row + 1
 
  629      if (
present(column)) 
then 
  630        write(column_str, 
'(I10)') column + 1
 
  634    if (
present(details)) 
then 
  643    call messages_write(
'You can get the documentation of the variable with the command:', new_line = .
true.)
 
  651    character(len=*),            
intent(in) :: var
 
  652    integer,                     
intent(in) :: val
 
  653    integer,           
optional, 
intent(in) :: iunit
 
  654    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  656    character(len=10) :: intstring
 
  658    assert(.not. (
present(iunit) .and. 
present(namespace)))
 
  660    write(intstring,
'(i10)') val
 
  661    message(1) = 
'Input: ['//trim(var)//
' = '//trim(adjustl(intstring))//
']' 
  668    character(len=*),            
intent(in) :: var
 
  669    character(len=*),            
intent(in) :: val
 
  670    integer,           
optional, 
intent(in) :: iunit
 
  671    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  673    assert(.not. (
present(iunit) .and. 
present(namespace)))
 
  675    message(1) = 
'Input: ['//trim(var)//
' = '//trim(val)//
']' 
  682    character(len=*),            
intent(in) :: var
 
  683    real(real64),                
intent(in) :: val
 
  684    type(
unit_t),      
optional, 
intent(in) :: unit
 
  685    integer,           
optional, 
intent(in) :: iunit
 
  686    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  688    character(len=11) :: floatstring
 
  690    assert(.not. (
present(iunit) .and. 
present(namespace)))
 
  692    if (.not. 
present(unit)) 
then 
  693      write(floatstring,
'(g11.4)') val
 
  694      message(1) = 
'Input: ['//trim(var)//
' = '//trim(adjustl(floatstring))//
']' 
  697      message(1) = 
'Input: ['//trim(var)//
' = '//trim(adjustl(floatstring))//
' '//trim(
units_abbrev(unit))//
']' 
  705    character(len=*),            
intent(in) :: var
 
  706    logical,                     
intent(in) :: val
 
  707    integer,           
optional, 
intent(in) :: iunit
 
  708    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  710    character(len=3) :: lstring
 
  712    assert(.not. (
present(iunit) .and. 
present(namespace)))
 
  719    message(1) = 
'Input: ['//trim(var)//
' = '//trim(lstring)//
']' 
  726    character(len=*),            
intent(in) :: var
 
  727    real(real64),                
intent(in) :: val(:)
 
  728    type(
unit_t),      
optional, 
intent(in) :: unit
 
  729    integer,           
optional, 
intent(in) :: iunit
 
  730    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  733    character(len=11) :: floatstring
 
  735    assert(.not. (
present(iunit) .and. 
present(namespace)))
 
  739      write(floatstring,
'(g11.4)') val(ii)
 
  744    if (
present(unit)) 
then 
  755    character(len=*),            
intent(in) :: var
 
  756    integer,           
optional, 
intent(in) :: iunit
 
  757    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  762    assert(.not. (
present(iunit) .and. 
present(namespace)))
 
  766    if (.not. mpi_grp%is_root()) 
return 
  768    if (
present(iunit)) 
then 
  779    character(len=*),            
intent(in) :: var
 
  780    integer(int64),                 
intent(in) :: option
 
  781    character(len=*),  
optional, 
intent(in) :: pre
 
  782    integer,           
optional, 
intent(in) :: iunit
 
  783    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  785    integer :: option4, iunit_
 
  788    assert(.not. (
present(iunit) .and. 
present(namespace)))
 
  791    if (.not. mpi_grp%is_root()) 
return 
  793    option4 = int(option, int32)
 
  795    if (
present(iunit)) 
then 
  806    character(len=*),            
intent(in) :: var
 
  807    integer(int32),                 
intent(in) :: option
 
  808    character(len=*),  
optional, 
intent(in) :: pre
 
  809    integer,           
optional, 
intent(in) :: iunit
 
  810    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  812    assert(.not. (
present(iunit) .and. 
present(namespace)))
 
  820    character(len=*),  
optional, 
intent(in) :: msg
 
  821    integer,           
optional, 
intent(in) :: iunit
 
  822    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  824    integer, 
parameter :: max_len = 70
 
  826    integer :: ii, jj, length
 
  828    character(len=70) :: str
 
  829    character(len=max_len) :: msg_combined
 
  832    if (
present(iunit)) 
then 
  839    if (.not. msg_mpi_grp%is_root()) 
return 
  841    if (
present(msg)) 
then 
  843      if (len_trim(msg) > max_len) 
then 
  844        msg_combined = trim(msg(1:max_len))
 
  846        msg_combined = trim(msg)
 
  848      length = len_trim(msg_combined)
 
  853      do ii = 1, (max_len - (length + 2))/2
 
  862        str(jj:jj) = msg_combined(ii:ii)
 
  890    character(len = *),           
intent(in) :: str
 
  891    integer,                      
intent(in) :: iunit
 
  892    character(len = *), 
optional, 
intent(in) :: adv
 
  894    character(len = 20) :: adv_
 
  897    if (
present(adv)) adv_ = trim(adv)
 
  899    write(iunit, 
'(a)', advance=adv_) trim(str)
 
  905    character(len = *), 
intent(in) :: str
 
  909    call date_and_time(
values=val)
 
  911    write(message(3),
'(a,i4,a1,i2.2,a1,i2.2,a,i2.2,a1,i2.2,a1,i2.2)') &
 
  912      str , val(1), 
"/", val(2), 
"/", val(3), &
 
  913      " at ", val(5), 
":", val(6), 
":", val(7)
 
  923  subroutine time_sum(sec1, usec1, sec2, usec2)
 
  924    integer, 
intent(in)    :: sec1
 
  925    integer, 
intent(in)    :: usec1
 
  926    integer, 
intent(inout) :: sec2
 
  927    integer, 
intent(inout) :: usec2
 
  932    usec2 = usec1 + usec2
 
  935    if (usec2 >= 1000000) 
then 
  937      usec2 = usec2 - 1000000
 
  946    character(len=*),           
intent(in) :: name
 
  947    character(len=*), 
optional, 
intent(in) :: rep
 
  951      write(message(1), 
'(a)') 
'Input variable '//trim(name)//
' is obsolete.' 
  953      if (
present(rep)) 
then 
  954        write(message(2), 
'(a)') 
' ' 
  955        write(message(3), 
'(a)') 
'Equivalent functionality can be obtained with the '//trim(rep)
 
  956        write(message(4), 
'(a)') 
'variable. Check the documentation for details.' 
  957        write(message(5), 
'(a)') 
'(You can use the `oct-help -p '//trim(rep)//
'` command).' 
  970    character(len=*),           
intent(in) :: name
 
  974      write(message(1), 
'(a)') 
'Input variable `'//trim(name)//
'` must be defined as a block.' 
  975      write(message(2), 
'(a)') 
'Please check the documentation for details.' 
  976      write(message(3), 
'(a)') 
'(You can use the `oct-help -p '//trim(name)//
'` command).' 
  985    character(len=*),  
intent(in) :: name
 
  986    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
  988    experimentals = experimentals + 1
 
  990    if (.not. 
conf%devel_version) 
then 
  994      call messages_write(
'If you still want to use this feature (at your own risk), check:')
 
  997      call messages_write(
'https://www.octopus-code.org/documentation/main/variables/execution/debug/experimentalfeatures')
 
 1001      write(message(1), 
'(a)') trim(name)//
' is under development.' 
 1002      write(message(2), 
'(a)') 
'It might not work or produce wrong results.' 
 1006      warnings = warnings - 1
 
 1013    character(len=*),            
intent(in) :: feature
 
 1014    type(
namespace_t), 
optional, 
intent(in) :: namespace
 
 1018    message(1) = trim(feature)//
" not implemented." 
 1035    current_line = current_line + 1
 
 1036    message(current_line) = 
'' 
 1038    if (current_line > max_lines) stop 
'Too many message lines.' 
 1044    real(real64),               
intent(in) :: val
 
 1045    character(len=*), 
optional, 
intent(in) :: fmt
 
 1046    logical,          
optional, 
intent(in) :: new_line
 
 1047    type(
unit_t),     
optional, 
intent(in) :: units
 
 1048    logical,          
optional, 
intent(in) :: align_left
 
 1049    logical,          
optional, 
intent(in) :: print_units
 
 1051    character(len=30) :: number
 
 1052    real(real64)     :: tval
 
 1057    if (
present(fmt)) 
then 
 1058      write(number, 
'('//trim(fmt)//
')') tval
 
 1060      write(number, 
'(f12.6)') tval
 
 1064      number = adjustl(number)
 
 1065      number(1:len(number)) = 
' '//number(1:len(number)-1)
 
 1068    write(message(current_line), 
'(a, a)') trim(message(current_line)), trim(number)
 
 1071      write(message(current_line), 
'(a, a, a)') trim(message(current_line)), 
' ', trim(
units_abbrev(units))
 
 1080    integer(int64),                
intent(in) :: val
 
 1081    character(len=*), 
optional, 
intent(in) :: fmt
 
 1082    logical,          
optional, 
intent(in) :: new_line
 
 1083    type(
unit_t),     
optional, 
intent(in) :: units
 
 1084    logical,          
optional, 
intent(in) :: print_units
 
 1086    character(len=20) :: number
 
 1087    real(real64)      :: val_conv_float
 
 1089    if (
present(units)) 
then 
 1092      if (
present(fmt)) 
then 
 1093        write(message(current_line), 
'(a, '//trim(fmt)//
')') trim(message(current_line)), val_conv_float
 
 1095        write(number, 
'(f15.3)') val_conv_float
 
 1096        write(message(current_line), 
'(3a)') trim(message(current_line)), 
' ', trim(adjustl(number))
 
 1101      if (
present(fmt)) 
then 
 1102        write(message(current_line), 
'(a, '//trim(fmt)//
')') trim(message(current_line)), val
 
 1104        write(number, 
'(i12)') val
 
 1105        write(message(current_line), 
'(3a)') trim(message(current_line)), 
' ', trim(adjustl(number))
 
 1112      write(message(current_line), 
'(a, a, a)') trim(message(current_line)), 
' ', trim(adjustl(
units_abbrev(units)))
 
 1115    if (
present(new_line)) 
then 
 1123    integer(int32),                
intent(in) :: val
 
 1124    character(len=*), 
optional, 
intent(in) :: fmt
 
 1125    logical,          
optional, 
intent(in) :: new_line
 
 1126    type(
unit_t),     
optional, 
intent(in) :: units
 
 1127    logical,          
optional, 
intent(in) :: print_units
 
 1135    character(len=*),           
intent(in) :: val
 
 1136    character(len=*), 
optional, 
intent(in) :: fmt
 
 1137    logical,          
optional, 
intent(in) :: new_line
 
 1139    character(len=100) :: fmt_
 
 1141    if (len(trim(message(current_line))) + len(trim(val)) > len(message(current_line))) 
then 
 1144      write(0, *) 
"Exceeded message line length limit, to write string:", trim(val)
 
 1147      write(message(current_line), 
'(a, '//trim(fmt_)//
')') trim(message(current_line)), trim(val)
 
 1150    if (
present(new_line)) 
then 
 1158    logical,           
intent(in) :: val
 
 1159    logical, 
optional, 
intent(in) :: new_line
 
 1161    character(len=3) :: text
 
 1169    if (len(trim(message(current_line))) + len(trim(text)) > len(message(current_line))) 
then 
 1170      write(message(current_line + 1), 
'(3a)') 
"Exceeded message line length limit, to write logical value '", trim(text), 
"'" 
 1174    write(message(current_line), 
'(a,1x,a)') trim(message(current_line)), trim(text)
 
 1176    if (
present(new_line)) 
then 
 1184    integer, 
intent(in) :: isignal
 
 1187    character(len=300) :: description
 
 1188    character(kind=c_char) :: cstr(301)
 
 1194        integer, 
intent(in) :: signum
 
 1195        character(kind=c_char), 
intent(out) :: signame(*)
 
 1203    write(msg, 
'(a,i2)') 
'' 
 1205    write(msg, 
'(a,i2)') 
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' 
 1207    write(msg, 
'(a,i2)') 
'' 
 1209    write(msg, 
'(a,i2,2a)') 
'  Octopus was killed by signal ', isignal, 
': ', trim(description)
 
 1211    write(msg, 
'(a,i2)') 
'' 
 1213    write(msg, 
'(a)')    
'  Note: Octopus is currently trapping signals. This might prevent the' 
 1215    write(msg, 
'(a)')    
'  use of debuggers or the generation of core dumps. To change this' 
 1217    write(msg, 
'(a)')    
'  behavior, use the DebugTrapSignals input option.' 
 1219    write(msg, 
'(a,i2)') 
'' 
 1221    write(msg, 
'(a,i2)') 
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%' 
 1224    if (
debug%trace) 
then 
 1227      write(msg, 
'(a)') 
'Octopus debug trace: ' 
 1230        write(msg, 
'(a,a)') 
' > ', trim(
sub_stack(ii))
 
 1235      write(msg, 
'(a)') 
" Octopus debug trace not available. You can enable it with 'Debug = trace'." 
 1254  character(len=*), 
intent(in) :: s, f
 
 1255  integer, 
intent(in) :: l
 
 1270  call messages_write(
'This should not happen and is likely a bug in the code.')
 
 1272  call messages_write(
'Please contact the developers and report how this occurred.')
 
 1274  call messages_write(
'You can open an issue on gitlab as described in Contributing.md.')
 
 1288  integer(c_int), 
intent(in) :: isignal
 
Prints out to iunit a message in the form: ["InputVariable" = value] where "InputVariable" is given b...
subroutine handle_segv(isignal)
subroutine assert_die(s, f, l)
This subroutine is called by the assert macro, it is not in a module so it can be called from any fil...
character(len=max_path_len) function, public debug_clean_path(filename)
Prune a filename path to only include subdirectories of the "src" directory.
type(debug_t), save, public debug
subroutine, public debug_init(this, namespace)
integer, public no_sub_stack
character(len=80), dimension(50), public sub_stack
The stack.
type(conf_t), public conf
Global instance of Octopus configuration.
subroutine, public io_close(iunit, grp)
subroutine, public io_mkdir(fname, namespace, parents)
integer, parameter, public iunit_out
integer, parameter, public iunit_err
integer function, public io_open(file, namespace, action, status, form, position, die, recl, grp)
System information (time, memory, sysname)
subroutine, public loct_rm(name)
subroutine string_c_to_f(c_string, f_string)
convert a C string to a Fortran string
subroutine, public alloc_error(size, file, line)
subroutine, public messages_end()
subroutine messages_write_integer8(val, fmt, new_line, units, print_units)
subroutine, public messages_print_with_emphasis(msg, iunit, namespace)
subroutine, public messages_not_implemented(feature, namespace)
subroutine, public messages_init(output_dir)
subroutine messages_print_var_option_8(var, option, pre, iunit, namespace)
subroutine messages_print_var_valuear(var, val, unit, iunit, namespace)
subroutine, public messages_variable_is_block(namespace, name)
subroutine, public messages_warning(no_lines, all_nodes, namespace)
subroutine messages_write_integer(val, fmt, new_line, units, print_units)
subroutine, public time_sum(sec1, usec1, sec2, usec2)
Computes t2 <- t1+t2. Parameters as in time_diff Assert: t1,2 <= 0.
subroutine messages_print_var_option_4(var, option, pre, iunit, namespace)
subroutine, public messages_obsolete_variable(namespace, name, rep)
subroutine, public messages_switch_status(status)
create status file for asynchronous communication
subroutine, public print_date(str)
subroutine flush_msg(str, iunit, adv)
subroutine, public messages_print_var_info(var, iunit, namespace)
subroutine, public messages_update_mpi_grp(namespace, mpigrp)
subroutine, public messages_new_line()
subroutine, public dealloc_error(size, file, line)
subroutine messages_print_var_values(var, val, iunit, namespace)
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
subroutine messages_print_var_valuei(var, val, iunit, namespace)
subroutine, public messages_input_error(namespace, var, details, row, column)
subroutine messages_print_var_valuer(var, val, unit, iunit, namespace)
integer, parameter, private sleepytime_nonwriters
seconds
subroutine, public messages_experimental(name, namespace)
subroutine messages_print_var_valuel(var, val, iunit, namespace)
subroutine messages_write_logical(val, new_line)
subroutine, public messages_info(no_lines, iunit, debug_only, stress, all_nodes, namespace)
subroutine messages_write_str(val, fmt, new_line)
type(mpi_grp_t) function messages_get_mpi_grp(namespace)
subroutine, public messages_dump_stack(isignal)
integer function messages_get_unit(namespace)
subroutine messages_write_float(val, fmt, new_line, units, align_left, print_units)
subroutine messages_reset_lines()
type(mpi_grp_t), public mpi_world
type(namespace_t), public global_namespace
logical function, public parse_is_defined(namespace, name)
This module implements a simple hash table for string valued keys and integer values using the C++ ST...
subroutine, public sihash_insert(h, key, val)
Insert a (key, val) pair into the hash table h.
subroutine, public sihash_init(h)
Initialize a hash table h with size entries. Since we use separate chaining, the number of entries in...
integer function, public sihash_lookup(h, key, found)
Look up a value in the hash table h. If found is present, it indicates if key could be found in the t...
subroutine, public sihash_end(h)
Free a hash table.
This module implements a simple hash table for string valued keys and integer values using the C++ ST...
subroutine, public sphash_init(h)
Initialize a hash table h with size entries. Since we use separate chaining, the number of entries in...
subroutine, public sphash_insert(h, key, val, clone)
Insert a (key, val) pair into the hash table h. If clone=.true., the object will be copied.
subroutine, public sphash_end(h)
Free a hash table.
class(*) function, pointer, public sphash_lookup(h, key, found)
Look up a value in the hash table h. If found is present, it indicates if key could be found in the t...
character(len=80) function, public str_center(s_in, l_in)
puts space around string, so that it is centered
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
character(len=20) pure function, public units_abbrev(this)
subroutine, public varinfo_print_option(iunit, var, option, pre)
subroutine, public varinfo_print(iunit, var, ierr)
void get_signal_description(fint *signum, char *signame)
This is defined even when running serial.
real(real64) function values(xx)