| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=r64), | intent(in) | :: | AU(IK(NetworkNumOfNodes+1)) | |||
| real(kind=r64), | intent(in) | :: | AD(NetworkNumOfNodes) | |||
| real(kind=r64), | intent(in) | :: | AL(IK(NetworkNumOfNodes+1)-1) | |||
| real(kind=r64), | intent(inout) | :: | B(NetworkNumOfNodes) | |||
| integer, | intent(in) | :: | IK(NetworkNumOfNodes+1) | |||
| integer, | intent(in) | :: | NEQ | |||
| integer, | intent(in) | :: | NSYM | 
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed arrows point from an interface to procedures which implement that interface. This could include the module procedures in a generic interface or the implementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.
      SUBROUTINE SLVSKY(AU,AD,AL,B,IK,NEQ,NSYM)
          ! SUBROUTINE INFORMATION:
          !       AUTHOR         George Walton
          !       DATE WRITTEN   Extracted from AIRNET
          !       MODIFIED       Lixing Gu, 2/1/04
          !                      Revised the subroutine to meet E+ needs
          !       MODIFIED       Lixing Gu, 6/8/05
          !
          !       RE-ENGINEERED  This subroutine is revised from CLVSKY developed by George Walton, NIST
          ! PURPOSE OF THIS SUBROUTINE:
          ! This subroutine solves simultaneous linear algebraic equations [A] * X = B
          ! using L-U factored skyline form of [A] from "FACSKY"
          ! METHODOLOGY EMPLOYED:
          ! na
          ! REFERENCES:
          ! na
          ! USE STATEMENTS:
          ! na
          IMPLICIT NONE    ! Enforce explicit typing of all variables in this routine
          ! SUBROUTINE ARGUMENT DEFINITIONS:
          INTEGER, INTENT(IN)  :: IK(NetworkNumOfNodes+1) ! pointer to the top of column/row "K"
          INTEGER, INTENT(IN)  :: NEQ   ! number of equations
          INTEGER, INTENT(IN)  :: NSYM  ! symmetry:  0 = symmetric matrix, 1 = non-symmetric
          ! noel, GNU says the AU is indexed above its upper bound
          !REAL(r64), INTENT(INOUT) :: AU(IK(NetworkNumOfNodes+1)-1) ! the upper triangle of [A] before and after factoring
          REAL(r64), INTENT(IN) :: AU(IK(NetworkNumOfNodes+1)) ! the upper triangle of [A] before and after factoring
          REAL(r64), INTENT(IN) :: AD(NetworkNumOfNodes)  ! the main diagonal of [A] before and after factoring
          REAL(r64), INTENT(IN) :: AL(IK(NetworkNumOfNodes+1)-1) ! the lower triangle of [A] before and after factoring
          REAL(r64), INTENT(INOUT) :: B(NetworkNumOfNodes) ! "B" vector (input); "X" vector (output).
          ! SUBROUTINE PARAMETER DEFINITIONS:
          ! na
          ! INTERFACE BLOCK SPECIFICATIONS
          ! na
          ! DERIVED TYPE DEFINITIONS
          ! na
          ! SUBROUTINE LOCAL VARIABLE DECLARATIONS:
      INTEGER  I, JHK, JHK1, K, LHK
      REAL(r64)  SDOT, T1
      ! FLOW:
      JHK = 1
      DO K=2,NEQ
        JHK1 = IK(K+1)
        LHK = JHK1-JHK
        IF(LHK.LE.0) CYCLE
        SDOT = 0.0d0
        IF(NSYM.EQ.0) THEN
          DO I=0,LHK-1
            SDOT = SDOT+AU(JHK+I)*B(K-LHK+I)
          END DO
        ELSE
          DO I=0,LHK-1
            SDOT = SDOT+AL(JHK+I)*B(K-LHK+I)
          END DO
        ENDIF
        B(K) = B(K)-SDOT
        JHK = JHK1
      END DO
!
      IF(NSYM.EQ.0) THEN
        DO K=1,NEQ
          B(K) = B(K)*AD(K)
        END DO
      END IF
!
      K = NEQ+1
      JHK1 = IK(K)
      DO WHILE (K .NE. 1)
        K = K-1
        IF(NSYM.EQ.1) B(K) = B(K)*AD(K)
        IF(K.EQ.1) EXIT
!        IF(K.EQ.1) RETURN
        JHK = IK(K)
        T1 = B(K)
        DO I=0,JHK1-JHK-1
          B(K-JHK1+JHK+I) = B(K-JHK1+JHK+I)-AU(JHK+I)*T1
        END DO
        JHK1 = JHK
      END DO
      RETURN
      END SUBROUTINE SLVSKY