expand the growing 2d array
first reset all entries
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(grw_logical2darray_type) | :: | me |
array to resize |
|||
integer, | intent(in), | optional | :: | length |
optional length to expand the array |
subroutine expand_ga2d_logical( me, length ) ! -------------------------------------------------------------------------- !> array to resize type(grw_logical2darray_type) :: me !> optional length to expand the array integer, intent(in), optional :: length ! -------------------------------------------------------------------------- logical, allocatable :: swpval(:,:) integer :: explen ! -------------------------------------------------------------------------- explen = 0 ! increase the container by the requested length of double it if( present(length) ) then explen = length else ! set the global minimum length, if doubling would be smaller than that explen = max(me%containersize, minlength) end if ! if the current size plus explen exceeds the max container size, ! reduce the size to the max container size. if( (huge(me%containersize) - explen) <= me%containersize) then ! set max container size me%containersize = huge(me%containersize) else ! set the calculated size me%containersize = me%containersize + explen end if if ( me%nvals > 0 ) then allocate(swpval(me%containerwidth,me%containersize)) !> first reset all entries swpval(:,:) = .false. swpval(:,:me%nvals) = me%val(:,:me%nvals) call move_alloc( swpval, me%val ) else ! me%nvals == 0 if ( allocated(me%val) ) deallocate( me%val ) allocate( me%val(me%containerwidth,me%containersize) ) end if end subroutine expand_ga2d_logical