init_real_2D Subroutine

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.

Type Bound

buffer_real_2D_t

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

Contents

Source Code


Source Code

    pure subroutine init_real_2D (this, rows, grow_factor, start_size)
        class(buffer_real_2D_t), intent(inout) :: this
        integer, intent(in) :: rows
        real, optional, intent(in) :: grow_factor
        integer, optional, intent(in) :: start_size
        character(*), parameter :: this_routine = 'buffer::init'

        if (present(grow_factor)) this%grow_factor = grow_factor
        if (present(start_size)) this%start_size = start_size
#ifdef DEBUG_
    block
        use util_mod, only: stop_all
        if (.not. (this%grow_factor > 1.0_dp)) then
            call stop_all (this_routine, "Assert fail: this%grow_factor > 1.0_dp")
        end if
    end block
#endif
#ifdef DEBUG_
    block
        use util_mod, only: stop_all
        if (.not. (this%start_size >= 0_int64)) then
            call stop_all (this_routine, "Assert fail: this%start_size >= 0_int64")
        end if
    end block
#endif

        allocate(this%buf(rows, this%start_size))
        this%pos = 0_int64
    end subroutine init_real_2D