sf_insert_delement_coo Subroutine

public subroutine sf_insert_delement_coo(sparse, value, i, j)

Arguments

Type IntentOptional Attributes Name
type(sf_sparse_dmatrix_coo), intent(inout) :: sparse
real(kind=8), intent(in) :: value
integer, intent(in) :: i
integer, intent(in) :: j

Calls

proc~~sf_insert_delement_coo~~CallsGraph proc~sf_insert_delement_coo sf_insert_delement_coo add_to add_to proc~sf_insert_delement_coo->add_to

Called by

proc~~sf_insert_delement_coo~~CalledByGraph proc~sf_insert_delement_coo sf_insert_delement_coo interface~sf_insert_element_coo sf_insert_element_coo interface~sf_insert_element_coo->proc~sf_insert_delement_coo

Source Code

  subroutine sf_insert_delement_coo(sparse,value,i,j)
    type(sf_sparse_dmatrix_coo),intent(inout) :: sparse
    real(8),intent(in)                    :: value
    integer,intent(in)                    :: i,j
    integer                               :: k
    logical                               :: present
    !
#ifdef _DEBUG
    write(*,"(A,2I8)")"DEBUG sf_insert_delement_coo: insert element in sparse @",i,j
#endif
    !
    present=.false.
    do k=1,sparse%Size !Find position if present
       if( (i==sparse%rows(k)).and.(j==sparse%cols(k)))then
          present=.true.
          exit
       end if
    end do
    !
    if(present)then                            ! Add if present
       sparse%vals(k) = sparse%vals(k) + value !
    else
       call add_to(sparse%rows,i)
       call add_to(sparse%cols,j)
       call add_to(sparse%vals,value)
       sparse%Size = sparse%Size +1
    endif
    !
    if(sparse%Size > sparse%Ncol*sparse%Nrow)stop "sf_insert_delement_coo ERROR: sparse%Size > sparse%Ncol*sparse%Nrow"
    !
  end subroutine sf_insert_delement_coo