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