i have a problem in runtime program that generating NAN value. After i traced back the script i found the root is in STG variables, to be more specific in the ( stg(:,:) / stg (1,i) ). i wrote the code in Fortran90 format.
Here is the code
SUBROUTINE HALBAN(STG, GLO, GDI, NDOM, NDOS, MBA, MBAC, ISOL)
IMPLICIT NONE
! INPUT OUTPUT VARIABLE
INTEGER, INTENT(IN) :: NDOM ,MBA ,MBAC ,ISOL ,NDOS
REAL(KIND=8), DIMENSION(NDOM,MBAC), INTENT(INOUT):: STG
REAL(KIND=8),DIMENSION(NDOS), INTENT(INOUT) :: GLO
REAL(KIND=8),DIMENSION(NDOS), INTENT(INOUT) :: GDI
! LOCAL VARIABLE
INTEGER :: NDOM1 ,I ,JT ,JB ,KL ,KR ,K ,J ,II
REAL(KIND=8) :: SUM
!MULTI DEGREES OF FREEDOM
NDOM1 = NDOM - 1
GO TO (10 ,50 ,10) ,ISOL
!TRIANGULATION AND SOLUTION
10 CONTINUE
PRINT*, "NDOM :" !CHECK NDOM
PRINT*, NDOM
PRINT*, 'MBAC' !CHECK MBA
PRINT*, MBAC
PRINT*, 'NDOS' !CHECK NDOS
PRINT*, NDOS
PRINT*, 'CHECK STG'
DO I = 1,MBAC
PRINT*, STG(:,I)
END DO
DO I=1 ,NDOM1
!UPPER TRIANGULATION OF STIFFNESS MATRIX, ESTABLISH TRIANGULATION LIMITS
JT = I + 1
JB = I + MBA
IF(JB.GT.NDOM) JB = NDOM
!COLUMN OPERATION
DO J = JT, JB
KL = J
KR = I + MBA
IF(KR.GT.NDOM) KR = NDOM
DO K = KL ,KR
STG(J ,K-J+1) = STG(J ,K-J+1) - STG(I ,J-I+1) * STG(I ,K-I+1) / STG(I ,1)
!STG(J ,K-J+1) = STG(I ,1)
END DO
END DO
END DO
PRINT*,'----------'
!CHECKING STG TRIAL 1
PRINT*,'CHECK STG(I ,1)'
DO I = 1, MBAC
PRINT*, STG(:,I)
END DO
IF(ISOL.EQ.1) GO TO 110
!REDUCTION OF GLOBAL LOAD VECTOR
50 CONTINUE
DO I=1 ,NDOM1
!ESTABLISH REDUCTION LIMITS
JT = I + 1
JB = I + MBA
IF(JB.GT.NDOM) JB = NDOM
!LOWER ROW OPERATION
DO J=JT ,JB
! PRINT*, '(J)', J
! PRINT*, 'GLO(J)', GLO(J)
! PRINT*, 'GLO(I)', GLO(I)
! PRINT*, 'STG(I ,J-I+1)', STG(I ,J-I+1)
! PRINT*, 'STG(I ,1)', STG(I ,1)
GLO(J) = GLO(J) - GLO(I) * STG(I ,J-I+1) / STG(I ,1)
! IF (GLO(J).LT.1.D-10) GLO(J) = 0.D0
! PRINT*, 'GLO(J)', GLO(J)
END DO
END DO
!CHECK GLO
PRINT*,'CHECKING GLO'
DO I = 1, NDOS
PRINT*, GLO(I)
END DO
!COMPUTE DISPLACEMENT
DO II=1 ,NDOM
!ESTABLISH REDUCTION LIMITS
I = NDOM - II + 1
SUM = GLO(I)
JT = I + 1
JB = I + MBA
IF(JT.GT.NDOM) JT = NDOM
IF(JB.GT.NDOM) JB = NDOM
IF(I.EQ.NDOM) GO TO 90
!BACK SUBSTITUTION
DO J = JT ,JB
! PRINT*, 'J', J
! PRINT*, 'STG(I ,J-I+1)', STG(I ,J-I+1)
! PRINT*, 'GDI(J)', GDI(J)
SUM = SUM - STG(I ,J-I+1) * GDI(J)
END DO
90 CONTINUE
! PRINT*, 'GLO(I)', GLO(I) !Check GLO value
! PRINT*, 'SUM', SUM !Check Sum Value
! PRINT*, 'STG(I,1)', STG(I,1) !Check STG Value
GDI(I) = SUM / STG(I,1)
! IF (GDI(I).LT.1.D-19) GDI(I) = 0.D0
END DO
110 CONTINUE
PRINT*, 'GLO' !Check GLO Value
PRINT*, GLO !Check GLO Value
! PRINT*, 'GDI'
! PRINT*, GDI
RETURN
END SUBROUTINE
The problems start from here
STG(J ,K-J+1) = STG(J ,K-J+1) - STG(I ,J-I+1) * STG(I ,K-I+1) / STG(I ,1)
the dividing operations to be exact
My question is, how do i get over this problem and generated the true value? to be precise, how do i fix the NAN stuff?