SMATVEC()

Fortran version:

    SUBROUTINE SMATVEC( NCOLS, NROWS, NCOFF, N, I, C, U, V )
      INTEGER, INTENT(IN   ) :: NCOLS           ! length of input vector
      INTEGER, INTENT(IN   ) :: NROWS           ! length of output vector
      INTEGER, INTENT(IN   ) :: NCOFF           ! max number of coefficients
      INTEGER, INTENT(IN   ) :: N( NROWS )      ! number of entries per row
      INTEGER, INTENT(IN   ) :: I( NCOFF )      ! columns list
      REAL   , INTENT(IN   ) :: C( NCOFF )      ! coefficient array
      REAL   , INTENT(IN   ) :: U( NCOLS )      !  input vector
      REAL   , INTENT(  OUT) :: V( NROWS )      ! output vector

C version: none

Summary:

SMATVEC() multiplies input vector U by sparse matrix <N,I,C> and returns the resulting output vector V, as is done in area-source gridding.
C(R) = SUMK=N(R-1)-1N(R) C(K) U(I(K))
For Fortran-90 declarations and interface checking:
    USE M3UTILIO
    

See also subroutines

BMATVEC and BILIN, DMATVEC, PMATVEC, and UNGRIDB
and programs
MTXBLEND, MTXBUILD, MTXCALC, MTXCPLE.

Fortran Usage:

    !!  Multiply ABUF(NC1,NR1) by MATX to get ZBUF(NC2,NR2)
    ...
    INTEGER :: NR,  NC    !!  for matrix
    INTEGER :: NR1, NC1      !!  for input grid
    INTEGER :: NR2, NC2      !!  for input grid
    INTEGER, ALLOCATABLE :: MATX(:)
    INTEGER, ALLOCATABLE :: MCNT(:)
    REAL,    ALLOCATABLE :: ABUF(:,:)
    REAL,    ALLOCATABLE :: ZBUF(:,:)
    ...
    !!  [Get dimensions (NC1,NR1), (NC2,NR2) for input and output grids]
    ...
    IF ( DESC3( MTXFILE ) ) THEN
        NR = NROWS3D
        NC = NCOLS3D
    ...
    IF ( NR .NE. NC2*NR2 )...   !!  consistency-check for dimensions
    ...
    ALLOCATE( MATX( NR+2*NC ),  &
              MCNT( 0:NR ),     &
              ABUF(NC1,NR1),    &
              ZBUF(NC2,NR2), STAT=ISTAT )
    ...
    IF ( .NOT.READ3( MTXFILE, ALLVAR3, 1,0,0, MATX ) ) ...
    ...
    IF ( .NOT.READ3( DATAFILE, 'FOO', 1,0,0, ABUF ) ) ...
    ...
    CALL SMATVEC( NC1*NR1, NR, NCOEF,                   &
                  MATX(1), MATX(NR+1), MATX(NC+NR+1),   &
                  ABUF, ZBUF )
    ...
    !!  or equivalently, for a time-stepped input:
    ...  


Previous: SETENV

Next: SORTI

Up: Utility Routines

To: Models-3/EDSS I/O API: The Help Pages