PROGRAM BUCKLE
C======================================================================
C AN FEM SOLVER FOR BUCKLING PROBLEM WITH MOMENT AT BOTH ENDS OF BEAM
C EQUATION: D2U/DXDX + ALPHA*U=0; ALPHA = P/(EI)
C P=APPLIED FORCE AT ENDS OF BEAM, E=YOUNG MODULUS, I=2ND MOMENT OF
C INERTIA. RL=LENGTH OF ELEMENT, IBTYPE(1)=BOUNDARY CONDITION AT THE
C LEFT END OF BEAM, IBTYPE(2)=BC AT RIGHT END. IBTYPE(I)=1 FOR FIXED
C DISPLACEMENT, IBTYPE(I)=2 FOR PRESCRIBED SLOPE AT THE END.
C MAY 16, 1994 EIJI FUKUMORI
C======================================================================
IMPLICIT REAL*8 ( A-H , O-Z )
PARAMETER ( ND=2, MXE=10, MXN=MXE+1 )
DIMENSION NODEX(MXE,ND),EI(MXE),X(MXN),A(MXN,MXN),RHS(MXN),
* IBTYPE(2), BV(2), STIFF(ND,ND)
C======================================================================
C (1) READING OF DATA
CALL INPUT ( MXE,MXN,ND,P,NE,NNODE,NODEX,EI,X,IBTYPE,BV )
C======================================================================
C (2) CONSTRUCTION OF FEM-MATRIX EQUATION
CALL MATRIX ( MXE,MXN,ND,P,NE,NNODE,STIFF,NODEX,EI,X,A,RHS )
C======================================================================
C (3) IMPLEMENTATION OF BOUNDARY CONDITION
CALL FORM ( MXN, NNODE, A, RHS, IBTYPE, BV )
C======================================================================
C (4) SOLVE FOR UNKNOWN VARIABLES
CALL SYSTEM ( MXN, NNODE, A, RHS )
C======================================================================
C (5) PRINTING RESULTS
DO I = 1 , NNODE
WRITE(*,*)' NODAL # =',I, ' DISPLACEMENT =', RHS(I)
END DO
STOP' NORMAL TERMINATION'
END
C
C
SUBROUTINE INPUT ( MXE,MXN,ND,P,NE,NNODE,NODEX,EI,X,IBTYPE,BV )
IMPLICIT REAL*8 ( A-H , O-Z )
DIMENSION NODEX(MXE,ND),EI(MXE),X(MXN),IBTYPE(2),BV(2)
OPEN ( 1,FILE='BUCKLE.DAT', STATUS='OLD')
READ(1,*) P
READ(1,*) NE
DO I = 1 , NE
READ(1,*) IEL, (NODEX(IEL,J),J=1,ND), EI(IEL)
END DO
NNODE = NE + 1
DO I = 1 , NNODE
READ(1,*) NODE, X(NODE)
END DO
READ(1,*) IBTYPE(1), BV(1)
READ(1,*) IBTYPE(2), BV(2)
CLOSE (1)
RETURN
END
C
C
SUBROUTINE MATRIX (MXE,MXN,ND,P,NE,NNODE,STIFF,NODEX,EI,X,A,RHS)
IMPLICIT REAL*8 ( A-H , O-Z )
DIMENSION NODEX(MXE,ND),EI(MXE),X(MXN),A(MXN,MXN),RHS(MXN),
* STIFF(ND,ND)
DO I = 1 , NNODE
DO J = 1 , NNODE
A(I,J) = 0.
END DO
RHS(I) = 0.
END DO
DO IEL = 1 , NE
I = NODEX(IEL,1)
J = NODEX(IEL,2)
RL = X(J) - X(I)
ALPHA = P / EI(I)
STIFF(1,1) = -1./RL + ALPHA*RL/3.
STIFF(1,2) = 1./RL + ALPHA*RL/6.
STIFF(2,1) = 1./RL + ALPHA*RL/6.
STIFF(2,2) = -1./RL + ALPHA*RL/3.
A(I,I) = A(I,I) + STIFF(1,1)
A(I,J) = A(I,J) + STIFF(1,2)
A(J,I) = A(J,I) + STIFF(2,1)
A(J,J) = A(J,J) + STIFF(2,2)
END DO
RETURN
END
C
C
SUBROUTINE FORM ( MXN, NNODE, A, RHS, IBTYPE, BV )
IMPLICIT REAL*8 ( A-H , O-Z )
DIMENSION IBTYPE(2),BV(2),A(MXN,MXN), RHS(MXN)
IF ( IBTYPE(1) .EQ. 1 ) THEN
A(1,1) = 1.
A(1,2) = 0.
RHS(1) = BV(1)
RHS(2) = RHS(2) - BV(1)*A(2,1)
A(2,1) = 0.
ELSE
RHS(1) = RHS(1) - BV(1)
END IF
IF ( IBTYPE(2) .EQ. 1 ) THEN
A(NNODE,NNODE) = 1.
A(NNODE,NNODE-1) = 0.
RHS(NNODE) = BV(2)
RHS(NNODE-1) = RHS(NNODE-1) - BV(2)*A(NNODE-1,NNODE)
A(NNODE-1,NNODE) = 0.
ELSE
RHS(NNODE) = RHS(NNODE) - BV(2)
END IF
RETURN
END
C
C
SUBROUTINE SYSTEM ( MXN, N , A , C )
IMPLICIT REAL*8 ( A-H , O-Z )
DIMENSION A (MXN,MXN) , C (MXN)
N1 = N - 1
DO K = 1, N1
L = K + 1
DO I = L , N
P = A (I,K) / A (K,K)
IF ( P .NE. 0. ) THEN
DO J = L , N
A (I,J) = A (I,J) - P * A ( K , J )
END DO
C ( I ) = C ( I) - P * C ( K )
END IF
END DO
END DO
C------- BACK SUBSTITUTION ---
C (N) = C (N) / A (N,N)
DO K = 1 , N1
I = N - K
L = I + 1
P = C ( I )
DO J = L , N
P = P - C (J) * A (I,J)
END DO
C ( I ) = P / A (I,I)
END DO
RETURN
END