Commit ff6d2064 authored by Kabelitz, Matthew Edward's avatar Kabelitz, Matthew Edward
Browse files

Updated serial matrixtypes to use d/onnz parameters

Ticket #5855
parent ad0eb974
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -264,6 +264,9 @@ SUBROUTINE MatrixTypes_Declare_ValidParams()
  CALL BandedMatrixType_reqParams%add('MatrixType->n',n)
  CALL BandedMatrixType_reqParams%add('MatrixType->m',m)
  CALL BandedMatrixType_reqParams%add('MatrixType->nnz',nnz)
  ! Banded Matrix Type - Optional
  CALL BandedMatrixType_optParams%add('MatrixType->dnnz',dnnz)
  CALL BandedMatrixType_optParams%add('MatrixType->onnz',onnz)
  !Dense Rectangular Matrix Type - Required
  CALL DenseRectMatrixType_reqParams%add('MatrixType->n',n)
  CALL DenseRectMatrixType_reqParams%add('MatrixType->m',m)
@@ -316,6 +319,7 @@ SUBROUTINE MatrixTypes_Clear_ValidParams()
  CALL TriDiagMatrixType_reqParams%clear()
  !Banded Matrix Type
  CALL BandedMatrixType_reqParams%clear()
  CALL BandedMatrixType_optParams%clear()
  !Dense Rectangular Matrix Type
  CALL DenseRectMatrixType_reqParams%clear()
  !Dense Square Matrix Type
+30 −19
Original line number Diff line number Diff line
@@ -422,6 +422,7 @@ SUBROUTINE init_BandedMatrixParam(matrix,Params)
  CLASS(BandedMatrixType),INTENT(INOUT) :: matrix
  CLASS(ParamType),INTENT(IN) :: Params
  TYPE(ParamType) :: validParams
  INTEGER(SIK),ALLOCATABLE :: nnzTmp(:)
  INTEGER(SIK) :: n,m,nnz

  !Check to set up required and optional param lists.
@@ -429,26 +430,37 @@ SUBROUTINE init_BandedMatrixParam(matrix,Params)

  !Validate against the reqParams and OptParams
  validParams=Params
  CALL validParams%validate(BandedMatrixType_reqParams)

  CALL validParams%validate(BandedMatrixType_reqParams,BandedMatrixType_optParams)
  ! Pull Data From Parameter List
  CALL validParams%get('MatrixType->n',n)
  m=n
  IF (validParams%has('MatrixType->m')) CALL validParams%get('MatrixType->m',m)
  CALL validParams%get('MatrixType->nnz',nnz)
  CALL validParams%clear()

  IF(.NOT. matrix%isInit) THEN
    IF(n <= 1) THEN
      CALL eMatrixType%raiseError('Incorrect input to '//modName//'::'//myName// &
          ' - Number of rows (n) must be greater than 1!')
    ELSEIF(m <= 1) THEN
    ENDIF
    IF(m <= 1) THEN
      CALL eMatrixType%raiseError('Incorrect input to '//modName//'::'//myName// &
          ' - Number of columns (m) must be greater than 1!')
    ELSEIF(nnz < 1) THEN
    ENDIF
    IF(nnz < 1) THEN
      IF (validParams%has("MatrixType->dnnz") .AND. validParams%has("MatrixType->onnz")) THEN
        CALL validParams%get("MatrixType->dnnz",nnzTmp)
        nnz = SUM(nnzTmp)
        DEALLOCATE(nnzTmp)
        CALL validParams%get("MatrixType->onnz",nnzTmp)
        nnz = nnz + SUM(nnzTmp)
        DEALLOCATE(nnzTmp)
      ELSE
        CALL eMatrixType%raiseError('Incorrect input to '//modName//'::'//myName// &
            ' - Number of nonzero elements (nnz) must be greater than 0!')
    ELSE
      ENDIF
    ENDIF
    CALL validParams%clear()

    ALLOCATE(matrix%iTmp(nnz))
    ALLOCATE(matrix%jTmp(nnz))
    ALLOCATE(matrix%elemTmp(nnz))
@@ -460,7 +472,6 @@ SUBROUTINE init_BandedMatrixParam(matrix,Params)
    matrix%n=n
    matrix%m=m
    matrix%nnz=nnz
    ENDIF
  ELSE
    CALL eMatrixType%raiseError('Incorrect call to '// &
        modName//'::'//myName//' - MatrixType already initialized')