MatVec
Perform matrix vector multipliction.
Calling example:
CALL MatVec(
MatrixField_::obj, &
& REAL::x(:), &
& REAL::y(:) &
& <, bool::isTranspose &>
& <, bool::addContribution &>
& <, real::scale>)
CALL MatVec(
MatrixField_::obj, &
& AbstractNodeField_::x, &
& AbstractNodeField_::y &
& <, bool::isTranspose &>
& <, bool::addContribution &>
& <, real::scale>)
Interface
- ܀ Interface
- ️܀ See example
- ↢
INTERFACE
SUBROUTINE Matvec(obj, x, y, isTranspose, addContribution, &
& scale)
IMPORT :: AbstractMatrixField_, DFP, LGT
CLASS(AbstractMatrixField_), INTENT(IN) :: obj
REAL(DFP), INTENT(INOUT) :: y(:)
!! Output vector y=Ax
REAL(DFP), INTENT(IN) :: x(:)
!! Input vector in y=Ax
LOGICAL(LGT), OPTIONAL, INTENT(IN) :: isTranspose
!! True if we have to use TRANSPOSE of matrix
LOGICAL(LGT), OPTIONAL, INTENT(IN) :: addContribution
!! Default is FALSE
!! if true then we do not set y = 0, and perform
!! y = y + matvec(obj, x)
!! if false, then we perform y = matvec(obj, x)
REAL(DFP), OPTIONAL, INTENT(IN) :: scale
END SUBROUTINE Matvec
END INTERFACE
This routine returns the matrix vector multiplication. Here, input vector (x
)
is a native fortran vector. The output vector (y
) is also a native fortran
vector. It should be noted that the output vector should be allocated
outside, and it should have same length as the input vector.
- ܀ Interface
- ️܀ See example
- ↢
INTERFACE
SUBROUTINE Matvec(obj, x, y, isTranspose, addContribution, &
& scale)
IMPORT :: AbstractMatrixField_, AbstractNodeField_, LGT, DFP
CLASS(AbstractMatrixField_), INTENT(IN) :: obj
CLASS(AbstractNodeField_), INTENT(INOUT) :: y
!! Output vector y=Ax
CLASS(AbstractNodeField_), INTENT(IN) :: x
!! Input vector in y=Ax
LOGICAL(LGT), OPTIONAL, INTENT(IN) :: isTranspose
!! True if we have to use TRANSPOSE of matrix
LOGICAL(LGT), OPTIONAL, INTENT(IN) :: addContribution
!! Default is FALSE
!! if true then we do not set y = 0, and perform
!! y = y + matvec(obj, x)
!! if false, then we perform y = matvec(obj, x)
REAL(DFP), OPTIONAL, INTENT(IN) :: scale
END SUBROUTINE Matvec
END INTERFACE
This routine returns the matrix vector multiplication. Here, input vector (x
)
is an instance of AbstractNodeField.
The output vector (y
) is also an instance of AbstractNodeField.
It should be noted that the output vector should be allocated
outside, and it should have same length as the input vector.