pack_data_I2_I1 Subroutine

private pure subroutine pack_data_I2_I1(a1, a2, packed)

Arguments

Type IntentOptional AttributesName
integer(kind=I2P), intent(in) :: a1(1:)

First data stream.

integer(kind=I1P), intent(in) :: a2(1:)

Second data stream.

integer(kind=I1P), intent(inout), allocatable:: packed(:)

Packed data into I1P array.

Description

Pack different kinds of data into single I1P array.

Called By

proc~~pack_data_i2_i1~~CalledByGraph proc~pack_data_i2_i1 pack_data_I2_I1 interface~pack_data pack_data interface~pack_data->proc~pack_data_i2_i1
Help

Variables

TypeVisibility AttributesNameInitial
integer(kind=I1P), public, allocatable:: p1(:)

Temporary packed data of first stream.

integer(kind=I1P), public, allocatable:: p2(:)

Temporary packed data of second stream.

integer(kind=I4P), public :: np

Size of temporary packed data.


Source Code

  pure subroutine pack_data_I2_I1(a1, a2, packed)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< Pack different kinds of data into single I1P array.
  !---------------------------------------------------------------------------------------------------------------------------------
  integer(I2P),              intent(in)    :: a1(1:)    !< First data stream.
  integer(I1P),              intent(in)    :: a2(1:)    !< Second data stream.
  integer(I1P), allocatable, intent(inout) :: packed(:) !< Packed data into I1P array.
  integer(I1P), allocatable                :: p1(:)     !< Temporary packed data of first stream.
  integer(I1P), allocatable                :: p2(:)     !< Temporary packed data of second stream.
  integer(I4P)                             :: np        !< Size of temporary packed data.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  np = size(transfer(a1,p1)) ; allocate(p1(1:np)) ; p1 = transfer(a1,p1)
  np = size(transfer(a2,p2)) ; allocate(p2(1:np)) ; p2 = transfer(a2,p2)
  if (allocated(packed)) deallocate(packed) ; allocate(packed(1:size(p1,dim=1)+size(p2,dim=1))) ; packed = [p1,p2]
  deallocate(p1,p2)
  return
  !---------------------------------------------------------------------------------------------------------------------------------
  endsubroutine pack_data_I2_I1