Computes the group index (grp_ptr, grp_cols) of the sparsity
partition. Must be called whenever ngrp or maxgrp is changed.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(sparsity_pattern), | intent(inout) | :: | me |
subroutine compute_group_index(me) implicit none class(sparsity_pattern),intent(inout) :: me integer :: j !! column number integer :: g !! group number integer,dimension(:),allocatable :: next !! next free position in `grp_cols` for each group if (allocated(me%grp_ptr)) deallocate(me%grp_ptr) if (allocated(me%grp_cols)) deallocate(me%grp_cols) if (.not. allocated(me%ngrp) .or. me%maxgrp<1) return allocate(me%grp_ptr(me%maxgrp+1)) allocate(me%grp_cols(size(me%ngrp))) me%grp_ptr = 0 do j = 1, size(me%ngrp) g = me%ngrp(j) me%grp_ptr(g+1) = me%grp_ptr(g+1) + 1 end do me%grp_ptr(1) = 1 do g = 1, me%maxgrp me%grp_ptr(g+1) = me%grp_ptr(g+1) + me%grp_ptr(g) end do next = me%grp_ptr(1:me%maxgrp) do j = 1, size(me%ngrp) g = me%ngrp(j) me%grp_cols(next(g)) = j next(g) = next(g) + 1 end do end subroutine compute_group_index