tem_appendSp1dArray Subroutine

private subroutine tem_appendSp1dArray(Array, Position, Value)

append an entry to an allocatable array 1d with single precision If the array is too small, reallocate with double size

Arguments

Type IntentOptional Attributes Name
real(kind=single_k), intent(inout), allocatable :: Array(:)

array to append value to

integer, intent(in) :: Position

position the value is appended to

real(kind=single_k), intent(in) :: Value

value to append


Called by

proc~~tem_appendsp1darray~~CalledByGraph proc~tem_appendsp1darray tem_appendSp1dArray interface~append~2 append interface~append~2->proc~tem_appendsp1darray proc~tem_calc_vrtx_coord tem_calc_vrtx_coord proc~tem_calc_vrtx_coord->interface~append~2 proc~tem_unify_vrtx tem_unify_vrtx proc~tem_calc_vrtx_coord->proc~tem_unify_vrtx proc~tem_findelement tem_findElement proc~tem_findelement->interface~append~2 proc~tem_findelement->proc~tem_findelement proc~tem_findpath tem_findPath proc~tem_findpath->interface~append~2 proc~tem_findpath->proc~tem_findpath proc~tem_unify_vrtx->interface~append~2 proc~hvs_output_init hvs_output_init proc~hvs_output_init->proc~tem_calc_vrtx_coord proc~tem_init_tracker tem_init_tracker proc~tem_init_tracker->proc~hvs_output_init

Source Code

  subroutine tem_appendSp1dArray(Array, Position, Value )
    ! ---------------------------------------------------------------------------
    !> array to append value to
    real(kind=single_k),intent(inout), allocatable :: Array(:)
    !> position the value is appended to
    integer,intent(in) :: Position
    !> value to append
    real(kind=single_k),intent(in) :: Value
    ! ---------------------------------------------------------------------------
    real(kind=single_k),allocatable :: tempArray(:)
    integer :: ArraySize,ierr, NewSize
    logical :: sizeZero
    ! ---------------------------------------------------------------------------

    ! Get size of array
    ArraySize = size(Array,1)
    ! Compare position, where to store with size
    if(Position .gt. ArraySize) then ! If position is larger than size
      sizeZero = .false.
      if( ArraySize .eq. 0) then
         ArraySize = 1
         sizeZero  = .true.
      endif
      NewSize = max(ArraySize*2, Position)
      ! allocate temporary array with double size
      allocate(tempArray(NewSize),stat=ierr)
      ! Copy to temp array
      if( .not. sizeZero ) tempArray(1:ArraySize) = Array(1:ArraySize)
      ! Deallocate Array
      deallocate(Array)
      ! Reallocate Array
      allocate(Array(NewSize),stat=ierr)
      Array(1:ArraySize) = tempArray(1:ArraySize)
      ! Deallocate temp array
      deallocate(tempArray)
      if(ierr .ne. 0) Write(*,*) 'Error in reallocating array'
    endif

    Array(Position) = Value

  end subroutine tem_appendSp1dArray