append an entry to an allocatable array 1d with double precision If the array is too small, reallocate with double size
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rk), | intent(inout), | allocatable | :: | Array(:,:) |
array to append value to |
|
integer, | intent(in) | :: | Position1 | |||
integer, | intent(in) | :: | Position2 | |||
real(kind=rk), | intent(in) | :: | Value |
value to append |
subroutine tem_appendDp2dArray(Array, Position1, Position2, Value ) ! --------------------------------------------------------------------------- !> array to append value to real(kind=rk),intent(inout), allocatable :: Array(:,:) !> integer,intent(in) :: Position1 !> integer,intent(in) :: Position2 !> value to append real(kind=rk),intent(in) :: Value ! --------------------------------------------------------------------------- real(kind=rk),allocatable :: tempArray(:,:) integer :: ArraySize1,ArraySize2,ierr integer :: NewSize1,NewSize2 logical :: changeSize logical :: sizeZero ! --------------------------------------------------------------------------- ! Get size of array ArraySize1 = size(Array,1) ArraySize2 = size(Array,2) changeSize = .false. sizeZero = .false. ! Compare position, where to store with size if(Position1 .gt. ArraySize1) then if( ArraySize1 .eq. 0) then ArraySize1 = 1 sizeZero = .true. endif NewSize1 = max( Position1, ArraySize1*2) changeSize = .true. else NewSize1 = ArraySize1 endif if(Position2 .gt. ArraySize2) then if( ArraySize2 .eq. 0) then ArraySize2 = 1 sizeZero = .true. endif NewSize2 = max( Position2, ArraySize2*2 ) changeSize = .true. else NewSize2 = ArraySize2 endif if(changeSize) then ! allocate temporary array with double size allocate(tempArray(NewSize1, NewSize2),stat=ierr) ! Copy to temp array if(.not. sizeZero) & & tempArray( 1:ArraySize1,1:ArraySize2 ) = & & Array( 1:ArraySize1,1:ArraySize2 ) ! Deallocate Array deallocate(Array) ! Reallocate Array allocate(Array(NewSize1, NewSize2),stat=ierr) Array(1:ArraySize1,1:ArraySize2) = tempArray(1:ArraySize1,1:ArraySize2) ! Deallocate temp array deallocate(tempArray) if(ierr .ne. 0) Write(*,*) 'Error in reallocating array' endif Array(Position1,Position2) = Value end subroutine tem_appendDp2dArray