PartMC  2.6.1
Functions/Subroutines | Variables
pmc_util Module Reference

Common utility subroutines. More...

Functions/Subroutines

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 sphere_vol2rad (v)
 Convert mass-equivalent volume $V$ (m^3) to geometric radius $R_{\rm geo}$ (m) for spherical particles. More...
 
real(kind=dp) elemental function rad2diam (r)
 Convert radius (m) to diameter (m). More...
 
real(kind=dp) elemental function sphere_rad2vol (r)
 Convert geometric radius $R_{\rm geo}$ (m) to mass-equivalent volume $V$ (m^3) for spherical particles. More...
 
real(kind=dp) elemental function diam2rad (d)
 Convert diameter (m) to radius (m). More...
 
real(kind=dp) function air_mean_free_path (temp, pressure)
 Calculate air molecular mean free path $l$ (m). 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...
 
real(kind=dp) function, dimension(:), allocatable linspace (min_x, max_x, n)
 Makes a linearly spaced array from min to max. More...
 
real(kind=dp) function, dimension(:), allocatable logspace (min_x, max_x, n)
 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...
 
integer function string_array_find (array, val)
 Return the index of the first occurance of the given value in the array, or 0 if it is not present. 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 savetxt_1d (filename, data)
 Write a real 1D array to a text file. More...
 
subroutine savetxt_2d (filename, data)
 Write a real 2D array to 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...
 
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...
 
integer function pow2_above (n)
 Return the least power-of-2 that is at least equal to n. More...
 

Variables

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.

Function/Subroutine Documentation

◆ air_mean_free_path()

real(kind=dp) function pmc_util::air_mean_free_path ( real(kind=dp), intent(in)  temp,
real(kind=dp), intent(in)  pressure 
)

Calculate air molecular mean free path $l$ (m).

Parameters
[in]tempTemperature (K).
[in]pressurePressure (Pa).

Definition at line 288 of file util.F90.

◆ almost_equal()

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 317 of file util.F90.

◆ almost_equal_abs()

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 344 of file util.F90.

◆ assert()

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.

◆ assert_msg()

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.

◆ average_integer()

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 993 of file util.F90.

◆ average_real()

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 1007 of file util.F90.

◆ check_event()

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 405 of file util.F90.

◆ check_time_multiple()

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 374 of file util.F90.

◆ close_file()

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.

◆ complex_to_string()

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 817 of file util.F90.

◆ deg2rad()

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

Convert degrees to radians.

Parameters
[in]degInput degrees.

Definition at line 1266 of file util.F90.

◆ diam2rad()

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 276 of file util.F90.

◆ die()

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.

◆ die_msg()

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.

◆ ensure_integer_array_2d_size()

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 1148 of file util.F90.

◆ ensure_integer_array_size()

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 1114 of file util.F90.

◆ ensure_real_array_2d_size()

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 1074 of file util.F90.

◆ ensure_real_array_size()

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 1040 of file util.F90.

◆ ensure_string_array_size()

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 1188 of file util.F90.

◆ entropy()

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 1629 of file util.F90.

◆ find_1d()

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 591 of file util.F90.

◆ free_unit()

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.

◆ get_basename()

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 1213 of file util.F90.

◆ get_unit()

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.

◆ harmonic_mean()

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 1598 of file util.F90.

◆ integer_sort()

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 1294 of file util.F90.

◆ integer_to_string()

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 765 of file util.F90.

◆ integer_to_string_max_len()

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 834 of file util.F90.

◆ interp_1d()

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 625 of file util.F90.

◆ interp_linear_disc()

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 662 of file util.F90.

◆ iso8601_date_and_time()

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 1246 of file util.F90.

◆ linspace()

real(kind=dp) function, dimension(:), allocatable pmc_util::linspace ( real(kind=dp), intent(in)  min_x,
real(kind=dp), intent(in)  max_x,
integer, intent(in)  n 
)

Makes a linearly spaced array from min to max.

Parameters
[in]min_xMinimum array value.
[in]max_xMaximum array value.
[in]nLength of array to create.
Returns
Return value.

Definition at line 459 of file util.F90.

◆ linspace_find()

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 531 of file util.F90.

◆ loadtxt()

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 1332 of file util.F90.

◆ logical_to_string()

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 797 of file util.F90.

◆ logspace()

real(kind=dp) function, dimension(:), allocatable pmc_util::logspace ( real(kind=dp), intent(in)  min_x,
real(kind=dp), intent(in)  max_x,
integer, intent(in)  n 
)

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

Parameters
[in]min_xMinimum array value.
[in]max_xMaximum array value.
[in]nLength of array to create.
Returns
Return value.

Definition at line 491 of file util.F90.

◆ logspace_find()

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 565 of file util.F90.

◆ nplogp()

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 1612 of file util.F90.

◆ open_file_read()

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.

◆ open_file_write()

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.

◆ pow2_above()

integer function pmc_util::pow2_above ( integer, intent(in)  n)

Return the least power-of-2 that is at least equal to n.

Parameters
[in]nLower bound on the power of 2.

Definition at line 1641 of file util.F90.

◆ rad2deg()

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

Convert radians to degrees.

Parameters
[in]radInput radians.

Definition at line 1278 of file util.F90.

◆ rad2diam()

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 251 of file util.F90.

◆ read_char_raw()

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 1487 of file util.F90.

◆ read_word_raw()

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 1531 of file util.F90.

◆ real_to_string()

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 781 of file util.F90.

◆ real_to_string_max_len()

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 855 of file util.F90.

◆ reallocate_real_array2d()

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 1439 of file util.F90.

◆ savetxt_1d()

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

Write a real 1D array to a text file.

Parameters
[in]filenameFilename to write to.
[in]dataArray of data to write.

Definition at line 1396 of file util.F90.

◆ savetxt_2d()

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

Write a real 2D array to a text file.

Parameters
[in]filenameFilename to write to.
[in]dataArray of data to write.

Definition at line 1416 of file util.F90.

◆ sphere_rad2vol()

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

Convert geometric radius $R_{\rm geo}$ (m) to mass-equivalent volume $V$ (m^3) for spherical particles.

Parameters
[in]rGeometric radius (m).

Definition at line 264 of file util.F90.

◆ sphere_vol2rad()

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

Convert mass-equivalent volume $V$ (m^3) to geometric radius $R_{\rm geo}$ (m) for spherical particles.

Parameters
[in]vParticle mass-equivalent volume (m^3).

Definition at line 239 of file util.F90.

◆ starts_with()

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 1576 of file util.F90.

◆ string_array_find()

integer function pmc_util::string_array_find ( character(len=*), dimension(:), intent(in)  array,
character(len=*), intent(in)  val 
)

Return the index of the first occurance of the given value in the array, or 0 if it is not present.

Parameters
[in]arrayArray of values.
[in]valValue to find.

Definition at line 1022 of file util.F90.

◆ string_to_integer()

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 687 of file util.F90.

◆ string_to_logical()

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 732 of file util.F90.

◆ string_to_real()

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 710 of file util.F90.

◆ time_to_string_max_len()

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 910 of file util.F90.

◆ vec_cts_to_disc()

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 952 of file util.F90.

◆ warn_assert_msg()

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.

◆ warn_msg()

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.

Variable Documentation

◆ max_units

integer, parameter pmc_util::max_units = 200

Maximum number of IO units usable simultaneously.

Definition at line 20 of file util.F90.

◆ pmc_max_filename_len

integer, parameter pmc_util::pmc_max_filename_len = 300

Maximum length of filenames.

Definition at line 29 of file util.F90.

◆ pmc_util_convert_string_len

integer, parameter pmc_util::pmc_util_convert_string_len = 100

Length of string for converting numbers.

Definition at line 27 of file util.F90.

◆ unit_offset

integer, parameter pmc_util::unit_offset = 10

Minimum unit number to allocate.

Definition at line 22 of file util.F90.

◆ unit_used

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.