resize_sparsity_vectors Subroutine

private subroutine resize_sparsity_vectors(me, n_icol, n_irow, n_linear_icol, n_linear_irow, n_linear_vals)

Resize the sparsity arrays after accumulating them.

Type Bound

numdiff_type

Arguments

Type IntentOptional 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

Calls

proc~~resize_sparsity_vectors~~CallsGraph proc~resize_sparsity_vectors numerical_differentiation_module::numdiff_type%resize_sparsity_vectors interface~expand_vector numdiff_utilities_module::expand_vector proc~resize_sparsity_vectors->interface~expand_vector proc~expand_vector_int numdiff_utilities_module::expand_vector_int interface~expand_vector->proc~expand_vector_int proc~expand_vector_real numdiff_utilities_module::expand_vector_real interface~expand_vector->proc~expand_vector_real

Called by

proc~~resize_sparsity_vectors~~CalledByGraph proc~resize_sparsity_vectors numerical_differentiation_module::numdiff_type%resize_sparsity_vectors proc~compute_sparsity_random numerical_differentiation_module::compute_sparsity_random proc~compute_sparsity_random->proc~resize_sparsity_vectors proc~compute_sparsity_random_2 numerical_differentiation_module::compute_sparsity_random_2 proc~compute_sparsity_random_2->proc~resize_sparsity_vectors

Source Code

    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