G.2.12 Residual_ELL_Matrix Procedure

The main documentation of the Residual_ELL_Matrix Procedure contains additional explanation of this code listing.

  subroutine Residual_ELL_Matrix (Residual_MV, A_ELLM, X_MV, B_MV)
  
    ! Input variables.

    ! ELL Matrix to be multiplied.
    type(ELL_Matrix_type), intent(inout) :: A_ELLM
    ! Mathematic Vector to be multiplied.
    type(Mathematic_Vector_type), intent(inout) :: X_MV
    ! Mathematic Vector to be subtracted.
    type(Mathematic_Vector_type), intent(inout) :: B_MV

    ! Output variable.

    ! Residual vector.
    type(Mathematic_Vector_type), intent(inout) :: Residual_MV 

    !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
    ! Verify requirements.
  
    VERIFY(Valid_State(A_ELLM),5)            ! A_ELLM is valid.
    VERIFY(Valid_State(X_MV),5)              ! X_MV is valid.
    VERIFY(Valid_State(B_MV),5)              ! B_MV is valid.
    VERIFY(Valid_State(Residual_MV),5)       ! Residual_MV is valid.
    ! X_MV has same Structure as A_ELLM Column_Structure.
    VERIFY(ASSOCIATED(A_ELLM%Column_Structure,X_MV%Structure),5) 
    ! B_MV and Residual_MV have same Structure as A_ELLM Row_Structure.
    VERIFY(ASSOCIATED(A_ELLM%Row_Structure,B_MV%Structure),5)
    VERIFY(ASSOCIATED(A_ELLM%Row_Structure,Residual_MV%Structure),5)

    ! Do the MatVec, store in the Residual (Residual = A x).

    call MatVec (A_ELLM, X_MV, Residual_MV)

    ! Subtract B. (Residual = Residual - B).

    Residual_MV%Values = Residual_MV%Values - B_MV%Values

    ! Unset the updated? variables.

    call Set_Not_Up_to_Date (Residual_MV)

    ! Verify guarantees - none.

    return
  end subroutine Residual_ELL_Matrix



Michael L. Hall