PartMC  2.3.0
Public Member Functions | Public Attributes | List of all members
pmc_util Module Reference

Common utility subroutines. More...

Public Member Functions

subroutine warn_msg (code, warning_msg, already_warned)
 Prints a warning message. More...
 
subroutine warn_assert_msg (code, condition_ok, warning_msg)
 Prints a warning message if condition_ok is false. More...
 
subroutine assert_msg (code, condition_ok, error_msg)
 Errors unless condition_ok is true. More...
 
subroutine assert (code, condition_ok)
 Errors unless condition_ok is true. More...
 
subroutine die (code)
 Error immediately. More...
 
subroutine die_msg (code, error_msg)
 Error immediately. More...
 
integer function get_unit ()
 Returns an available unit number. This should be freed by free_unit(). More...
 
subroutine free_unit (unit)
 Frees a unit number returned by get_unit(). More...
 
subroutine open_file_read (filename, unit)
 Open a file for reading with an automatically assigned unit and test that it succeeds. The file should be closed with close_file(). More...
 
subroutine open_file_write (filename, unit)
 Open a file for writing with an automatically assigned unit and test that it succeeds. The file should be closed with close_file(). More...
 
subroutine close_file (unit)
 Close a file and de-assign the unit. More...
 
real(kind=dp) elemental function vol2rad (v)
 Convert volume (m^3) to radius (m). More...
 
real(kind=dp) elemental function vol2diam (v)
 Convert volume (m^3) to diameter (m). More...
 
real(kind=dp) elemental function rad2diam (r)
 Convert radius (m) to diameter (m). More...
 
real(kind=dp) elemental function rad2vol (r)
 Convert radius (m) to volume (m^3). More...
 
real(kind=dp) elemental function diam2rad (d)
 Convert diameter (m) to radius (m). More...
 
real(kind=dp) elemental function diam2vol (d)
 Convert diameter (m) to volume (m^3). More...
 
logical function almost_equal (d1, d2)
 Tests whether two real numbers are almost equal using only a relative tolerance. More...
 
logical function almost_equal_abs (d1, d2, abs_tol)
 Tests whether two real numbers are almost equal using an absolute and relative tolerance. More...
 
subroutine check_time_multiple (first_name, first_time, second_name, second_time)
 Check that the first time interval is close to an integer multiple of the second, and warn if it is not. More...
 
subroutine check_event (time, timestep, interval, last_time, do_event)
 Computes whether an event is scheduled to take place. More...
 
subroutine linspace (min_x, max_x, x)
 Makes a linearly spaced array from min to max. More...
 
subroutine logspace (min_x, max_x, x)
 Makes a logarithmically spaced array of length n from min to max. More...
 
integer function linspace_find (min_x, max_x, n, x)
 Find the position of a real number in a 1D linear array. More...
 
integer function logspace_find (min_x, max_x, n, x)
 Find the position of a real number in a 1D logarithmic array. More...
 
integer function find_1d (n, x_vals, x)
 Find the position of a real number in an arbitrary 1D array. More...
 
real(kind=dp) function interp_1d (x_vals, y_vals, x)
 1D linear interpolation. More...
 
real(kind=dp) function interp_linear_disc (x_1, x_n, n, i)
 Linear interpolation over discrete indices. More...
 
integer function string_to_integer (string)
 Convert a string to an integer. More...
 
real(kind=dp) function string_to_real (string)
 Convert a string to a real. More...
 
logical function string_to_logical (string)
 Convert a string to a logical. More...
 
character(len=pmc_util_convert_string_len)
function 
integer_to_string (val)
 Convert an integer to a string format. More...
 
character(len=pmc_util_convert_string_len)
function 
real_to_string (val)
 Convert a real to a string format. More...
 
character(len=pmc_util_convert_string_len)
function 
logical_to_string (val)
 Convert a logical to a string format. More...
 
character(len=pmc_util_convert_string_len)
function 
complex_to_string (val)
 Convert a complex to a string format. More...
 
character(len=pmc_util_convert_string_len)
function 
integer_to_string_max_len (val, max_len)
 Convert an integer to a string format of maximum length. More...
 
character(len=pmc_util_convert_string_len)
function 
real_to_string_max_len (val, max_len)
 Convert a real to a string format of maximum length. More...
 
character(len=pmc_util_convert_string_len)
function 
time_to_string_max_len (time, max_len)
 Convert a time to a string format of maximum length. More...
 
subroutine vec_cts_to_disc (n, vec_cts, n_samp, vec_disc)
 Convert a real-valued vector into an integer-valued vector. More...
 
subroutine average_integer (int_vec, int_avg)
 Computes the average of an array of integer numbers. More...
 
subroutine average_real (real_vec, real_avg)
 Computes the average of an array of real numbers. More...
 
subroutine ensure_real_array_size (x, n, only_grow)
 Allocate or reallocate the given array to ensure it is of the given size, preserving any data and/or initializing to 0. More...
 
subroutine ensure_real_array_2d_size (x, n1, n2, only_grow)
 Allocate or reallocate the given array to ensure it is of the given size, preserving any data and/or initializing to 0. More...
 
subroutine ensure_integer_array_size (x, n, only_grow)
 Allocate or reallocate the given array to ensure it is of the given size, preserving any data and/or initializing to 0. More...
 
subroutine ensure_integer_array_2d_size (x, n1, n2, only_grow)
 Allocate or reallocate the given array to ensure it is of the given size, preserving any data and/or initializing to 0. More...
 
subroutine ensure_string_array_size (x, n)
 Allocate or reallocate the given array to ensure it is of the given size, without preserving data. More...
 
subroutine get_basename (filename, basename)
 Strip the extension to find the basename. More...
 
subroutine iso8601_date_and_time (date_time)
 Current date and time in ISO 8601 format. More...
 
real(kind=dp) function deg2rad (deg)
 Convert degrees to radians. More...
 
real(kind=dp) function rad2deg (rad)
 Convert radians to degrees. More...
 
subroutine integer_sort (data, perm)
 Sort the given data array and return the permutation defining the sort. More...
 
subroutine loadtxt (filename, data)
 Load a real array from a text file. More...
 
subroutine reallocate_real_array2d (data, rows, cols)
 Reallocate a 2D real array to the given size, preserving the contents. More...
 
subroutine read_char_raw (unit, char, eol, eof)
 Read a single character from a file, signaling if we have hit end-of-line (EOL) or end-of-file (EOF). If EOL or EOF are true then the character value should be ignored. More...
 
subroutine read_word_raw (unit, word, eol, eof)
 Read a white-space delimited word from a file, signaling if we have EOL or EOF. If EOL or EOF are true then the word will still be meaningful data. If there was no data to be read then len(word) will be 0. More...
 
logical function starts_with (string, start_string)
 Checks whether a string starts with a given other string. More...
 
subroutine copy_real_1d (source, dest)
 Copy a 1D array of reals, reallocating if necessary. More...
 
subroutine copy_real_2d (source, dest)
 Copy a 2D array of reals, reallocating if necessary. More...
 
elemental real(kind=dp) function harmonic_mean (x1, x2)
 Compute the harmonic mean of two numbers. More...
 
elemental real(kind=dp) function nplogp (p)
 Compute $ - p \ln p$ for computing entropy. More...
 
real(kind=dp) function entropy (p)
 Compute the entropy of a probability mass function (non necessarily normalized). More...
 

Public Attributes

integer, parameter max_units = 200
 Maximum number of IO units usable simultaneously. More...
 
integer, parameter unit_offset = 10
 Minimum unit number to allocate. More...
 
logical, dimension(max_units), save unit_used = .false.
 Table of unit numbers storing allocation status. More...
 
integer, parameter pmc_util_convert_string_len = 100
 Length of string for converting numbers. More...
 
integer, parameter pmc_max_filename_len = 300
 Maximum length of filenames. More...
 

Detailed Description

Common utility subroutines.

Definition at line 9 of file util.F90.

Member Function/Subroutine Documentation

logical function pmc_util::almost_equal ( real(kind=dp), intent(in)  d1,
real(kind=dp), intent(in)  d2 
)

Tests whether two real numbers are almost equal using only a relative tolerance.

Parameters
[in]d1First number to compare.
[in]d2Second number to compare.

Relative tolerance.

Definition at line 311 of file util.F90.

logical function pmc_util::almost_equal_abs ( real(kind=dp), intent(in)  d1,
real(kind=dp), intent(in)  d2,
real(kind=dp), intent(in)  abs_tol 
)

Tests whether two real numbers are almost equal using an absolute and relative tolerance.

Parameters
[in]d1First number to compare.
[in]d2Second number to compare.
[in]abs_tolTolerance for when d1 equals d2.

Relative tolerance.

Definition at line 338 of file util.F90.

subroutine pmc_util::assert ( integer, intent(in)  code,
logical, intent(in)  condition_ok 
)

Errors unless condition_ok is true.

Parameters
[in]codeStatus code to use if assertion fails.
[in]condition_okWhether the assertion is ok.

Definition at line 102 of file util.F90.

subroutine pmc_util::assert_msg ( integer, intent(in)  code,
logical, intent(in)  condition_ok,
character(len=*), intent(in)  error_msg 
)

Errors unless condition_ok is true.

Parameters
[in]codeStatus code to use if assertion fails.
[in]condition_okWhether the assertion is ok.
[in]error_msgMsg if assertion fails.

Definition at line 76 of file util.F90.

subroutine pmc_util::average_integer ( integer, dimension(:), intent(in)  int_vec,
integer, intent(out)  int_avg 
)

Computes the average of an array of integer numbers.

Parameters
[in]int_vecArray of integer numbers.
[out]int_avgAverage of int_vec.

Definition at line 971 of file util.F90.

subroutine pmc_util::average_real ( real(kind=dp), dimension(:), intent(in)  real_vec,
real(kind=dp), intent(out)  real_avg 
)

Computes the average of an array of real numbers.

Parameters
[in]real_vecArray of real numbers.
[out]real_avgAverage of real_vec.

Definition at line 985 of file util.F90.

subroutine pmc_util::check_event ( real(kind=dp), intent(in)  time,
real(kind=dp), intent(in)  timestep,
real(kind=dp), intent(in)  interval,
real(kind=dp), intent(inout)  last_time,
logical, intent(out)  do_event 
)

Computes whether an event is scheduled to take place.

The events should occur ideally at times 0, interval, 2*interval, etc. The events are guaranteed to occur at least interval * (1 - tolerance) apart, and if at least interval time has passed then the next call is guaranteed to do the event. Otherwise the timestep is used to guess whether to do the event.

Parameters
[in]timeCurrent time.
[in]timestepEstimate of the time to the next call.
[in]intervalHow often the event should be done.
[in,out]last_timeWhen the event was last done.
[out]do_eventWhether the event should be done.

Fuzz for event occurance.

Definition at line 399 of file util.F90.

subroutine pmc_util::check_time_multiple ( character(len=*), intent(in)  first_name,
real(kind=dp), intent(in)  first_time,
character(len=*), intent(in)  second_name,
real(kind=dp), intent(in)  second_time 
)

Check that the first time interval is close to an integer multiple of the second, and warn if it is not.

Parameters
[in]first_nameName of the first time variable.
[in]first_timeFirst time variable (s).
[in]second_nameName of the second time variable.
[in]second_timeSecond time variable (s).

Definition at line 368 of file util.F90.

subroutine pmc_util::close_file ( integer, intent(in)  unit)

Close a file and de-assign the unit.

Parameters
[in]unitUnit to close.

Definition at line 225 of file util.F90.

character(len=pmc_util_convert_string_len) function pmc_util::complex_to_string ( complex(kind=dc), intent(in)  val)

Convert a complex to a string format.

Parameters
[in]valValue to convert.

Definition at line 795 of file util.F90.

subroutine pmc_util::copy_real_1d ( real(kind=dp), dimension(:), intent(in)  source,
real(kind=dp), dimension(:), intent(inout), pointer  dest 
)

Copy a 1D array of reals, reallocating if necessary.

Parameters
[in]sourceSource array.
[in,out]destDestination array.

Definition at line 1515 of file util.F90.

subroutine pmc_util::copy_real_2d ( real(kind=dp), dimension(:, :), intent(in)  source,
real(kind=dp), dimension(:, :), intent(inout), pointer  dest 
)

Copy a 2D array of reals, reallocating if necessary.

Parameters
[in]sourceSource array.
[in,out]destDestination array.

Definition at line 1533 of file util.F90.

real(kind=dp) function pmc_util::deg2rad ( real(kind=dp), intent(in)  deg)

Convert degrees to radians.

Parameters
[in]degInput degrees.

Definition at line 1226 of file util.F90.

real(kind=dp) elemental function pmc_util::diam2rad ( real(kind=dp), intent(in)  d)

Convert diameter (m) to radius (m).

Parameters
[in]dDiameter (m).

Definition at line 286 of file util.F90.

real(kind=dp) elemental function pmc_util::diam2vol ( real(kind=dp), intent(in)  d)

Convert diameter (m) to volume (m^3).

Parameters
[in]dDiameter (m).

Definition at line 298 of file util.F90.

subroutine pmc_util::die ( integer, intent(in)  code)

Error immediately.

Parameters
[in]codeStatus code to use if assertion fails.

Definition at line 121 of file util.F90.

subroutine pmc_util::die_msg ( integer, intent(in)  code,
character(len=*), intent(in)  error_msg 
)

Error immediately.

Parameters
[in]codeStatus code to use if assertion fails.
[in]error_msgMsg if assertion fails.

Definition at line 133 of file util.F90.

subroutine pmc_util::ensure_integer_array_2d_size ( integer, dimension(:, :), intent(inout), allocatable  x,
integer, intent(in)  n1,
integer, intent(in)  n2,
logical, intent(in), optional  only_grow 
)

Allocate or reallocate the given array to ensure it is of the given size, preserving any data and/or initializing to 0.

Parameters
[in,out]xArray of integer numbers.
[in]n1Desired first size of array.
[in]n2Desired second size of array.
[in]only_growWhether to only increase the array size (default .true.).

Definition at line 1108 of file util.F90.

subroutine pmc_util::ensure_integer_array_size ( integer, dimension(:), intent(inout), allocatable  x,
integer, intent(in)  n,
logical, intent(in), optional  only_grow 
)

Allocate or reallocate the given array to ensure it is of the given size, preserving any data and/or initializing to 0.

Parameters
[in,out]xArray of integer numbers.
[in]nDesired size of array.
[in]only_growWhether to only increase the array size (default .true.).

Definition at line 1074 of file util.F90.

subroutine pmc_util::ensure_real_array_2d_size ( real(kind=dp), dimension(:, :), intent(inout), allocatable  x,
integer, intent(in)  n1,
integer, intent(in)  n2,
logical, intent(in), optional  only_grow 
)

Allocate or reallocate the given array to ensure it is of the given size, preserving any data and/or initializing to 0.

Parameters
[in,out]xArray of real numbers.
[in]n1Desired first size of array.
[in]n2Desired second size of array.
[in]only_growWhether to only increase the array size (default .true.).

Definition at line 1034 of file util.F90.

subroutine pmc_util::ensure_real_array_size ( real(kind=dp), dimension(:), intent(inout), allocatable  x,
integer, intent(in)  n,
logical, intent(in), optional  only_grow 
)

Allocate or reallocate the given array to ensure it is of the given size, preserving any data and/or initializing to 0.

Parameters
[in,out]xArray of real numbers.
[in]nDesired size of array.
[in]only_growWhether to only increase the array size (default .true.).

Definition at line 1000 of file util.F90.

subroutine pmc_util::ensure_string_array_size ( character(len=*), dimension(:), intent(inout), allocatable  x,
integer, intent(in)  n 
)

Allocate or reallocate the given array to ensure it is of the given size, without preserving data.

Parameters
[in,out]xArray of strings numbers.
[in]nDesired size of array.

Definition at line 1148 of file util.F90.

real(kind=dp) function pmc_util::entropy ( real(kind=dp), dimension(:), intent(in)  p)

Compute the entropy of a probability mass function (non necessarily normalized).

Parameters
[in]pProbability mass function, will be normalized before use.

Definition at line 1583 of file util.F90.

integer function pmc_util::find_1d ( integer, intent(in)  n,
real(kind=dp), dimension(n), intent(in)  x_vals,
real(kind=dp), intent(in)  x 
)

Find the position of a real number in an arbitrary 1D array.

Takes an array of x_vals, and a single x value, and returns the position p such that x_vals(p) <= x < x_vals(p+1). If p == 0 then x < x_vals(1) and if p == n then x_vals(n) <= x. x_vals must be sorted in increasing order.

If the array is known to be linearly or logarithmically spaced then linspace_find() or logspace_find() will be much faster.

Parameters
[in]nNumber of values.
[in]x_valsX value array, must be sorted.
[in]xValue to interpolate at.

Definition at line 577 of file util.F90.

subroutine pmc_util::free_unit ( integer, intent(in)  unit)

Frees a unit number returned by get_unit().

Definition at line 171 of file util.F90.

subroutine pmc_util::get_basename ( character(len=*), intent(in)  filename,
character(len=*), intent(out)  basename 
)

Strip the extension to find the basename.

The filename is assumed to be of the form basename.extension, where extension contains no periods. If there is no period in filename then basename is the whole filename.

Parameters
[in]filenameFull filename.
[out]basenameBasename.

Definition at line 1173 of file util.F90.

integer function pmc_util::get_unit ( )

Returns an available unit number. This should be freed by free_unit().

Definition at line 147 of file util.F90.

elemental real(kind=dp) function pmc_util::harmonic_mean ( real(kind=dp), intent(in)  x1,
real(kind=dp), intent(in)  x2 
)

Compute the harmonic mean of two numbers.

Parameters
[in]x1First number to average.
[in]x2Second number to average.

Definition at line 1552 of file util.F90.

subroutine pmc_util::integer_sort ( integer, dimension(:), intent(inout)  data,
integer, dimension(size(data)), intent(out)  perm 
)

Sort the given data array and return the permutation defining the sort.

If data is the original data array, new_data is the sorted value of data, and perm is the returned permutation, then new_data(i) = data(perm(i)).

Parameters
[in,out]dataData array to sort, sorted on exit.
[out]permPermutation defining the sort: new_data(i) = data(perm(i)).

Definition at line 1254 of file util.F90.

character(len=pmc_util_convert_string_len) function pmc_util::integer_to_string ( integer, intent(in)  val)

Convert an integer to a string format.

Parameters
[in]valValue to convert.

Definition at line 743 of file util.F90.

character(len=pmc_util_convert_string_len) function pmc_util::integer_to_string_max_len ( integer, intent(in)  val,
integer, intent(in)  max_len 
)

Convert an integer to a string format of maximum length.

Parameters
[in]valValue to convert.
[in]max_lenMaximum length of resulting string.

Definition at line 812 of file util.F90.

real(kind=dp) function pmc_util::interp_1d ( real(kind=dp), dimension(:), intent(in)  x_vals,
real(kind=dp), dimension(size(x_vals)), intent(in)  y_vals,
real(kind=dp), intent(in)  x 
)

1D linear interpolation.

Takes an array of x and y, and a single x value, and returns the corresponding y using linear interpolation. x_vals must be sorted.

Parameters
[in]x_valsX value array, must be sorted.
[in]y_valsY value array.
[in]xValue to interpolate at.

Definition at line 611 of file util.F90.

real(kind=dp) function pmc_util::interp_linear_disc ( real(kind=dp), intent(in)  x_1,
real(kind=dp), intent(in)  x_n,
integer, intent(in)  n,
integer, intent(in)  i 
)

Linear interpolation over discrete indices.

Takes real values x_1 and x_n and integers n and i and returns the linear interpolation so that x_1 is returned when i = 1 and x_n is returned when i = n.

Parameters
[in]x_1Value of x when i = 1.
[in]x_nValue of x when i = n.
[in]nNumber of points to interpolate over.
[in]iIndex to interpolate at.

Definition at line 644 of file util.F90.

subroutine pmc_util::iso8601_date_and_time ( character(len=*), intent(out)  date_time)

Current date and time in ISO 8601 format.

Parameters
[out]date_timeResult string.

Definition at line 1206 of file util.F90.

subroutine pmc_util::linspace ( real(kind=dp), intent(in)  min_x,
real(kind=dp), intent(in)  max_x,
real(kind=dp), dimension(:), intent(out)  x 
)

Makes a linearly spaced array from min to max.

Parameters
[in]min_xMinimum array value.
[in]max_xMaximum array value.
[out]xArray.

Definition at line 453 of file util.F90.

integer function pmc_util::linspace_find ( real(kind=dp), intent(in)  min_x,
real(kind=dp), intent(in)  max_x,
integer, intent(in)  n,
real(kind=dp), intent(in)  x 
)

Find the position of a real number in a 1D linear array.

If xa is the array allocated by linspace(min_x, max_x, xa) then i = linspace_find(min_x, max_x, n, x) returns the index i satisfying xa(i) <= x < xa(i+1) for min_x <= x < max_x. If x == max_x then i = n - 1. If x > max_x then i = n. If x < min_x then i = 0. Thus 0 <= i <= n. Here n is the length of xa.

This is equivalent to using find_1d() but much faster if the array is linear.

Parameters
[in]min_xMinimum array value.
[in]max_xMaximum array value.
[in]nNumber of entries.
[in]xValue.

Definition at line 517 of file util.F90.

subroutine pmc_util::loadtxt ( character(len=*), intent(in)  filename,
real(kind=dp), dimension(:,:), intent(inout), allocatable  data 
)

Load a real array from a text file.

Parameters
[in]filenameFilename to read from.
[in,out]dataArray to store data in.

Definition at line 1292 of file util.F90.

character(len=pmc_util_convert_string_len) function pmc_util::logical_to_string ( logical, intent(in)  val)

Convert a logical to a string format.

Parameters
[in]valValue to convert.

Definition at line 775 of file util.F90.

subroutine pmc_util::logspace ( real(kind=dp), intent(in)  min_x,
real(kind=dp), intent(in)  max_x,
real(kind=dp), dimension(:), intent(out)  x 
)

Makes a logarithmically spaced array of length n from min to max.

Parameters
[in]min_xMinimum array value.
[in]max_xMaximum array value.
[out]xArray.

Definition at line 481 of file util.F90.

integer function pmc_util::logspace_find ( real(kind=dp), intent(in)  min_x,
real(kind=dp), intent(in)  max_x,
integer, intent(in)  n,
real(kind=dp), intent(in)  x 
)

Find the position of a real number in a 1D logarithmic array.

If xa is the array allocated by logspace(min_x, max_x, xa) then i = logspace_find(min_x, max_x, n, x) returns the index i satisfying xa(i) <= x < xa(i+1) for min_x <= x < max_x. If x >= max_x then i = n. If x < min_x then i = 0. Thus 0 <= i <= n. Here n is the length of xa.

This is equivalent to using find_1d() but much faster if the array is logarithmic.

Parameters
[in]min_xMinimum array value.
[in]max_xMaximum array value.
[in]nNumber of entries.
[in]xValue.

Definition at line 551 of file util.F90.

elemental real(kind=dp) function pmc_util::nplogp ( real(kind=dp), intent(in)  p)

Compute $ - p \ln p$ for computing entropy.

Parameters
[in]pProbability $p$.

Definition at line 1566 of file util.F90.

subroutine pmc_util::open_file_read ( character(len=*), intent(in)  filename,
integer, intent(out)  unit 
)

Open a file for reading with an automatically assigned unit and test that it succeeds. The file should be closed with close_file().

Parameters
[in]filenameFilename to open.
[out]unitUnit assigned to file.

Definition at line 184 of file util.F90.

subroutine pmc_util::open_file_write ( character(len=*), intent(in)  filename,
integer, intent(out)  unit 
)

Open a file for writing with an automatically assigned unit and test that it succeeds. The file should be closed with close_file().

Parameters
[in]filenameFilename to open.
[out]unitUnit assigned to file.

Definition at line 205 of file util.F90.

real(kind=dp) function pmc_util::rad2deg ( real(kind=dp), intent(in)  rad)

Convert radians to degrees.

Parameters
[in]radInput radians.

Definition at line 1238 of file util.F90.

real(kind=dp) elemental function pmc_util::rad2diam ( real(kind=dp), intent(in)  r)

Convert radius (m) to diameter (m).

Parameters
[in]rRadius (m).

Definition at line 262 of file util.F90.

real(kind=dp) elemental function pmc_util::rad2vol ( real(kind=dp), intent(in)  r)

Convert radius (m) to volume (m^3).

Parameters
[in]rRadius (m).

Definition at line 274 of file util.F90.

subroutine pmc_util::read_char_raw ( integer, intent(in)  unit,
character, intent(out)  char,
logical, intent(out)  eol,
logical, intent(out)  eof 
)

Read a single character from a file, signaling if we have hit end-of-line (EOL) or end-of-file (EOF). If EOL or EOF are true then the character value should be ignored.

Testing with gfortran 4.5.3 and different length files shows:

Empty file (total file length 0):

  • eol = .false., eof = .true.
  • subsequent calls error

File containing a single 'A' character (total file length 1):

  • char = 'A', eol = .false., eof = .false.
  • eol = .false., eof = .true.
  • subsequent calls error

File containing a single newline '
' (total file length 1):

  • eol = .true., eof = .false.
  • eol = .false., eof = .true.
  • subsequent calls error

File containing a character and newline 'A
' (total file length 2):

  • char = 'A', eol = .false., eof = .false.
  • eol = .true., eof = .false.
  • eol = .false., eof = .true.
  • subsequent calls error
Parameters
[in]unitUnit number to read from.
[out]charCharacter read.
[out]eolTrue if at EOL (end of line).
[out]eofTrue if at EOF (end of file).

Definition at line 1404 of file util.F90.

subroutine pmc_util::read_word_raw ( integer, intent(in)  unit,
character(len=*), intent(out)  word,
logical, intent(out)  eol,
logical, intent(out)  eof 
)

Read a white-space delimited word from a file, signaling if we have EOL or EOF. If EOL or EOF are true then the word will still be meaningful data. If there was no data to be read then len(word) will be 0.

Parameters
[in]unitUnit number to read from.
[out]wordWord read.
[out]eolTrue if at EOL (end of line).
[out]eofTrue if at EOF (end of file).

Definition at line 1448 of file util.F90.

character(len=pmc_util_convert_string_len) function pmc_util::real_to_string ( real(kind=dp), intent(in)  val)

Convert a real to a string format.

Parameters
[in]valValue to convert.

Definition at line 759 of file util.F90.

character(len=pmc_util_convert_string_len) function pmc_util::real_to_string_max_len ( real(kind=dp), intent(in)  val,
integer, intent(in)  max_len 
)

Convert a real to a string format of maximum length.

Parameters
[in]valValue to convert.
[in]max_lenMaximum length of resulting string.

Definition at line 833 of file util.F90.

subroutine pmc_util::reallocate_real_array2d ( real(kind=dp), dimension(:,:), intent(inout), allocatable  data,
integer, intent(in)  rows,
integer, intent(in)  cols 
)

Reallocate a 2D real array to the given size, preserving the contents.

Parameters
[in,out]dataArray to reallocate.
[in]rowsNew leading dimension.
[in]colsNew trailing dimension.

Definition at line 1356 of file util.F90.

logical function pmc_util::starts_with ( character(len=*), intent(in)  string,
character(len=*), intent(in)  start_string 
)

Checks whether a string starts with a given other string.

starts_with(A, B) returns true if string A starts with string B.

Parameters
[in]stringString to test.
[in]start_stringStarting string.

Definition at line 1493 of file util.F90.

integer function pmc_util::string_to_integer ( character(len=*), intent(in)  string)

Convert a string to an integer.

Parameters
[in]stringString to convert.

Definition at line 665 of file util.F90.

logical function pmc_util::string_to_logical ( character(len=*), intent(in)  string)

Convert a string to a logical.

Parameters
[in]stringString to convert.

Definition at line 710 of file util.F90.

real(kind=dp) function pmc_util::string_to_real ( character(len=*), intent(in)  string)

Convert a string to a real.

Parameters
[in]stringString to convert.

Definition at line 688 of file util.F90.

character(len=pmc_util_convert_string_len) function pmc_util::time_to_string_max_len ( real(kind=dp), intent(in)  time,
integer, intent(in)  max_len 
)

Convert a time to a string format of maximum length.

Parameters
[in]timeTime to convert (s).
[in]max_lenMaximum length of resulting string.

Definition at line 888 of file util.F90.

subroutine pmc_util::vec_cts_to_disc ( integer, intent(in)  n,
real(kind=dp), dimension(n), intent(in)  vec_cts,
integer, intent(in)  n_samp,
integer, dimension(n), intent(out)  vec_disc 
)

Convert a real-valued vector into an integer-valued vector.

Use n_samp samples. Returns discrete vector whose relative entry sizes are $ \ell_1 $ closest to the continuous vector.

Parameters
[in]nNumber of entries in vectors.
[in]vec_ctsContinuous vector.
[in]n_sampNumber of discrete samples to use.
[out]vec_discDiscretized vector.

Definition at line 930 of file util.F90.

real(kind=dp) elemental function pmc_util::vol2diam ( real(kind=dp), intent(in)  v)

Convert volume (m^3) to diameter (m).

Parameters
[in]vVolume (m^3).

Definition at line 250 of file util.F90.

real(kind=dp) elemental function pmc_util::vol2rad ( real(kind=dp), intent(in)  v)

Convert volume (m^3) to radius (m).

Parameters
[in]vVolume (m^3).

Definition at line 238 of file util.F90.

subroutine pmc_util::warn_assert_msg ( integer, intent(in)  code,
logical, intent(in)  condition_ok,
character(len=*), intent(in)  warning_msg 
)

Prints a warning message if condition_ok is false.

Parameters
[in]codeStatus code to use.
[in]condition_okWhether the assertion is ok.
[in]warning_msgMessage to display.

Definition at line 58 of file util.F90.

subroutine pmc_util::warn_msg ( integer, intent(in)  code,
character(len=*), intent(in)  warning_msg,
logical, intent(inout), optional  already_warned 
)

Prints a warning message.

Parameters
[in]codeStatus code to use.
[in]warning_msgMessage to display.
[in,out]already_warnedFlag to control warning only once (should be a save variable).

Definition at line 36 of file util.F90.

Member Data Documentation

integer, parameter pmc_util::max_units = 200

Maximum number of IO units usable simultaneously.

Definition at line 20 of file util.F90.

integer, parameter pmc_util::pmc_max_filename_len = 300

Maximum length of filenames.

Definition at line 29 of file util.F90.

integer, parameter pmc_util::pmc_util_convert_string_len = 100

Length of string for converting numbers.

Definition at line 27 of file util.F90.

integer, parameter pmc_util::unit_offset = 10

Minimum unit number to allocate.

Definition at line 22 of file util.F90.

logical, dimension(max_units), save pmc_util::unit_used = .false.

Table of unit numbers storing allocation status.

Definition at line 24 of file util.F90.


The documentation for this module was generated from the following file: