Resize the sparsity arrays after accumulating them.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(numdiff_type), | intent(inout) | :: | me | |||
integer, | intent(inout) | :: | n_icol | |||
integer, | intent(inout) | :: | n_irow | |||
integer, | intent(inout) | :: | n_linear_icol | |||
integer, | intent(inout) | :: | n_linear_irow | |||
integer, | intent(inout) | :: | n_linear_vals |
subroutine resize_sparsity_vectors(me,n_icol,n_irow,n_linear_icol,& n_linear_irow,n_linear_vals) implicit none class(numdiff_type),intent(inout) :: me integer,intent(inout) :: n_icol integer,intent(inout) :: n_irow integer,intent(inout) :: n_linear_icol integer,intent(inout) :: n_linear_irow integer,intent(inout) :: n_linear_vals if (me%exception_raised) return ! check for exceptions ! resize to correct size: if (allocated(me%sparsity%icol)) then call expand_vector(me%sparsity%icol,n_icol,me%chunk_size,finished=.true.) call expand_vector(me%sparsity%irow,n_irow,me%chunk_size,finished=.true.) me%sparsity%num_nonzero_elements = size(me%sparsity%irow) else me%sparsity%num_nonzero_elements = 0 end if ! linear pattern (note: there may be no linear elements): me%sparsity%linear_sparsity_computed = me%compute_linear_sparsity_pattern .and. & allocated(me%sparsity%linear_vals) if (me%sparsity%linear_sparsity_computed) then call expand_vector(me%sparsity%linear_icol,n_linear_icol,me%chunk_size,finished=.true.) call expand_vector(me%sparsity%linear_irow,n_linear_irow,me%chunk_size,finished=.true.) call expand_vector(me%sparsity%linear_vals,n_linear_vals,me%chunk_size,finished=.true.) me%sparsity%num_nonzero_linear_elements = n_linear_vals else me%sparsity%num_nonzero_linear_elements = 0 end if end subroutine resize_sparsity_vectors