buffer_real_2D_t Derived Type

type, public :: buffer_real_2D_t

@brief Re-sizeable array type that can be filled elementwise to build up a contiguous data chunk that can then be dumped to an allocatable

@details For multidimensional buffers only the last dimension can grow. (i.e. it is only possible to add columns.)

The buffer has to be initiliazed before first use. After dumping (dump_reset) it is automatically resetted.


Contents

Source Code


Components

Type Visibility Attributes Name Initial
real(kind=dp), private, dimension(:, :), allocatable :: buf
integer(kind=int64), private :: pos
real(kind=dp), private :: grow_factor = 1.5_dp
integer(kind=int64), private :: start_size = 100_int64

Type-Bound Procedures

procedure, public, :: init => init_real_2D

  • private pure subroutine init_real_2D(this, rows, grow_factor, start_size)

    @brief Set up the re-sizeable array (buffer) with a given start size and grow_factor.

    @details Has to be called before first use and can be called any time.

    @param[in] rows Number of rows in the first dimension. @param[in] start_size Initial size of the buffer along the last dimension. @param[in] grow_factor Factor about which to grow the buffer along the last dimension, if the capacity is not sufficient.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_real_2D_t), intent(inout) :: this
    integer, intent(in) :: rows
    real, intent(in), optional :: grow_factor
    integer, intent(in), optional :: start_size

procedure, public, :: finalize => finalize_real_2D

  • private pure subroutine finalize_real_2D(this)

    @brief Deallocate the resource.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_real_2D_t), intent(inout) :: this

procedure, private :: reset => reset_real_2D

  • private pure subroutine reset_real_2D(this)

    @brief Reset an already initiliazed buffer.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_real_2D_t), intent(inout) :: this

procedure, public, :: size => get_size_real_2D

  • private pure function get_size_real_2D(this) result(n_els)

    @brief Returns the number of already stored elements in the buffer along the last dimension.

    @return n_els Number of elements already added to the buffer.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_real_2D_t), intent(in) :: this

    Return Value integer(kind=int64)

procedure, public, :: capacity => get_capacity_real_2D

  • private pure function get_capacity_real_2D(this) result(capacity)

    @brief Returns the capacity of the buffer along the last dimension.

    @return n_els Number of elements already added to the buffer.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_real_2D_t), intent(in) :: this

    Return Value integer(kind=int64)

procedure, public, :: push_back => add_val_real_2D

  • private pure subroutine add_val_real_2D(this, val)

    @brief Append a value to the buffer, expanding the capacity if necessary.

    @param[in] val Value to be added

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_real_2D_t), intent(inout) :: this
    real(kind=dp), intent(in), dimension(:) :: val

procedure, private :: dump => dump_real_2D

  • private pure subroutine dump_real_2D(this, tgt)

    @brief Dump the buffer to an allocatable array.

    @param[out] tgt Allocatable array (reset upon entry), contains the stored elements of the buffer on return. The buffer has to be reinitialized if used again.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_real_2D_t), intent(inout) :: this
    real(kind=dp), intent(out), dimension(:, :), allocatable :: tgt

procedure, public, :: dump_reset => dump_reset_real_2D

  • private pure subroutine dump_reset_real_2D(this, tgt)

    Dump the buffer to an allocatable array and reset the buffer.

    @param[out] tgt Allocatable array (reset upon entry), contains the stored elements of the buffer on return. The buffer is writable afterwards.

    Arguments

    Type IntentOptional Attributes Name
    class(buffer_real_2D_t), intent(inout) :: this
    real(kind=dp), intent(out), dimension(:, :), allocatable :: tgt

Source Code

    type :: buffer_real_2D_t
        private

        real(dp), dimension(:, :), allocatable :: buf
        ! Internal position of the buffer
        integer(int64) :: pos
        real(dp) :: grow_factor = 1.5_dp
        integer(int64) :: start_size = 100_int64

    contains

        procedure :: init => init_real_2D
        procedure :: finalize => finalize_real_2D
        procedure, private :: reset => reset_real_2D

        procedure :: size => get_size_real_2D
        procedure :: capacity => get_capacity_real_2D

        procedure :: push_back => add_val_real_2D

        procedure, private :: dump => dump_real_2D
        procedure :: dump_reset => dump_reset_real_2D
    end type buffer_real_2D_t