PROGRAM MEMBRAN C C ****************************************************** C * PROGRAMM ZUR BERECHNUNG VON EBENEN MEMBRANEN * C * * C * GLEICHUNGSLOESER : SYMSOL * C *********** ****************************************** IMPLICIT REAL*8 (A-H,O-Z) CHARACTER*72 HED C COMMON /DATA/INP,IOUT COMMON /CONT/NE,Nj,KODE(60),NODI(60),NODJ(60),NODK(60), & NODL(60),LM(4) COMMON /ELEM/X(80),Y(80),W(80),S(4,4),P(4),B(80),A(80,80),Q,F C C---- DEFINITION EIN- UND AUSGABEKANAL INP = 10 IOUT = 11 C C---- FILEDEFINITION FUER EIN- UND AUSGABE (IBM) C OPEN( INP,FILE='./eingabe_quad',STATUS='OLD',FORM='FORMATTED') OPEN(IOUT,FILE='./ausgabe_quad',STATUS='UNKNOWN',FORM='FORMATTED') C C---- EINGABEDATEN WERDEN GELESEN UND AUSGEDRUCKT C CALL INPUT(HED) C C---- AUFSTELLEN DER ELEMENTSTEIFIGKEIT UND C ZUSAMMENBAU ZUR SYSTEMSTEIFIGKEIT C CALL STIFF C C---- AUFSTELLUNG DES LASTVEKTORS, EINBAU DER C VORGEGEBENEN VERSCHIEBUNGEN UND AUFLOESUNG C NACH DEN KNOTENVERSCHIEBUNGEN, AUSGABE C CALL BOUND C CLOSE(11) STOP END SUBROUTINE INPUT(HED) C C ************************************************************* C * EINGABEPHASE : EINLESEN DER DATEN UND KONTROLLAUSDRUCK * C ************************************************************* IMPLICIT REAL*8 (A-H,O-Z) CHARACTER*72 HED C COMMON /DATA/INP,IOUT COMMON /CONT/NE,NJ,KODE(60),NODI(60),NODJ(60),NODK(60), & NODL(60),LM(4) COMMON /ELEM/X(80),Y(80),W(80),S(4,4),P(4),B(80),A(80,80),Q,F C C---- EINLESEN DER KONTROLLINFORMATION C C HED - TITEL FUER DAS BERECHNETE SYSTEM BZW LASTFALL C NJ - ANZAHL DER KNOTEN C NE - ANZAHL DER ELEMENTE C READ ( INP,1000) HED,NJ,NE WRITE (IOUT,2000) HED,NJ,NE C C---- EINLESEN FLAECHENLAST P UND VORSPANNKRAFT S C READ ( INP,3000) Q,F WRITE (IOUT,3001) Q,F C C---- EINLESEN KNOTENINFORMATIONEN C C KODE - AUFLAGERBEDINGUNG (0: FREI, 1: UNVERSCHIEBLICH) C X - X- KOORDINATE C Y - Y- KOORDINATE C W - VERSCHIEBUNG C WRITE (IOUT,2001) DO 100 N = 1,NJ READ (INP,1001,ERR=900,END=800) M,KODE(M),X(M),Y(M),W(M) 100 WRITE (IOUT,2002,ERR=900) M,KODE(M),X(M),Y(M),W(M) C C---- EINLESEN ELEMENTINFORMATIONEN C C NODI - KNOTENNUMMER OBEN RECHTS C NODJ - KNOTENNUMMER OBEN LINKS C NODK - KNOTENNUMMER UNTEN LINKS C NODL - KNOTENNUMMER UNTEN RECHTS C WRITE (IOUT,2003) DO 200 N = 1,NE READ ( INP,1002,ERR=900,END=800) M,NODI(M),NODJ(M), & NODK(M),NODL(M) 200 WRITE (IOUT,2004,ERR=900) M,NODI(M),NODJ(M), & NODK(M),NODL(M) RETURN C 800 CLOSE(INP) RETURN 900 WRITE(IOUT,'(A)') 'FEHLERHAFTE EINGABEDATEI' STOP RETURN C 1000 FORMAT (A/2I5) 1001 FORMAT (2I5,3F10.0) 1002 FORMAT (5I5) 2000 FORMAT (1X,A//' ANZAHL DER KNOTEN =',I4/ 1' ANZAHL DER ELEMENTE =',I4/) 2001 FORMAT (' KNOTENNR.',6X,'KODE ',13X,'X',14X,'Y',14X,'W') 2002 FORMAT (2I10, 3E15.6) 2003 FORMAT (/' ELEMENT ',7X,'I',9X,'J',9X,'K',9X,'L') 2004 FORMAT (5I10) 3000 FORMAT (2F10.0) 3001 FORMAT (/' FLAECHENLAST = ',E15.5/ & ' VORSPANNKRAFT = ',E15.5/) C END SUBROUTINE STIFF C C *********************************************** C * ELEMTSTEIFIGKEITSMATRIX ---> * C * SYSTEMSTEIFIGKEITSMATRIX * C *********************************************** IMPLICIT REAL*8 (A-H,O-Z) C COMMON /CONT/NE,NJ,KODE(60),NODI(60),NODJ(60),NODK(60), & NODL(60),LM(4) COMMON /ELEM/X(80),Y(80),W(80),S(4,4),P(4),B(80),A(80,80),Q,F C C----INITIALISIERUNG DER STEIFIGREITSMATRIX UND DES LASTVEKTORS C DO 200 I = 1,NJ B(I) = 0.0 DO 200 J = 1,NJ 200 A(I,J) = 0.0 C C---- SCHLEIFE UEBER ALLE ELEMENTE C DO 500 N = 1,NE C C--- ERMITTLUNG VON LAENGE, BREITE C UND DEHNSTEIFIGKEIT DES ELEMENTS C I = NODI(N) J = NODJ(N) K = NODK(N) L = NODL(N) DX = ABS(X(J)-X(I)) DY = ABS(Y(I)-Y(L)) DUM = 6.D0*DX*DY C C S1 = (DX**2+DY**2)/DUM S2 = (DX**2-2.D0*DY**2)/DUM S3 = (-2.D0*DX**2+DY**2)/DUM C C----AUFSTELLEN DES 4X1 ELEMENTLASTVEKTORS C DUM = 0.25D0*Q*DX*DY/F P(1) = DUM P(2) = DUM P(3) = DUM P(4) = DUM C C----AUFSTELLEN DER 4X4 ELEMENTSTEIFIGKEITSMATRIX C S(1,1) = S1+S1 S(1,2) = S2 S(1,3) = -S1 S(1,4) = S3 S(2,1) = S2 S(2,2) = S(1,1) S(2,3) = S3 S(2,4) = -S1 S(3,1) = -S1 S(3,2) = S3 S(3,3) = S(1,1) S(3,4) = S2 S(4,1) = S3 S(4,2) = -S1 S(4,3) = S2 S(4,4) = S(1,1) C C C----- UEERTRAGUNG DER ELEMENTSTEIFIGKEIT AUF DIE SYSTEM- C STEIFIGKEITSMATRIX, ZUSAMMENBAU OHNE RANDBEDINGUNGEN C LM(1) = NODI(N) LM(2) = NODJ(N) LM(3) = NODK(N) LM(4) = NODL(N) DO 400 I = 1,4 II = LM(I) B(II) = B(II) - P(I) DO 400 J = 1,4 JJ = LM(J) 400 A(II,JJ) = A(II,JJ) + S(I,J) C 500 CONTINUE RETURN END SUBROUTINE BOUND C C ******************************************************* C * AUFSTELLEN DES LASTVEKTORS, EINBAU DER RANDBEDING- * C * UNGEN UND LOESUNG NACH DEN UNBEK. VERSCHIEBUNGEN * C ******************************************************* IMPLICIT REAL*8 (A-H,O-Z) DATA ZERO/0.0D0/,ONE/1.0D0/ C COMMON /DATA/INP,IOUT COMMON /CONT/NE,NJ,KODE(60),NODI(60),NODJ(60),NODK(60), & NODL(60),LM(4) COMMON /ELEM/X(80),Y(80),W(80),S(4,4),P(4),B(80),A(80,80),Q,F C C---- RANDBEDINGUNG FUER DIE KNOTEVERSCHIEBUNGEN C UMFORMUNG VON A UND B FUER DEN FALL C DASS W VERSCHIEBUNGEN SIND C C KODE - 0 UMFORMUNG NICHT NOTWENDIG C KODE - 1 UMFORMUNG NOTWENDIG C DO 500 N = 1,NJ IF(KODE(N).EQ.0) GOTO 500 C C---- UMFORMUNG DER MATRIX FUER Z-VERSCHIEBUNG C 150 DO 200 I = 1,NJ B(I) = B(I) - A(I,N)*W(N) A(I,N) = ZERO 200 A(N,I) = ZERO A(N,N) = ONE B(N) = W(N) 500 CONTINUE C C---- GLEICHUNGSLOESUNG C UNBEKANNTE VERSCHIEBUNGEN AUF DEN LASTVEKTOR C CALL SYMSOL(A,B,80,NJ) C C---- AUSDRUCKEN DER KNOTENVERSCHIEBUNGEN C IF(NJ.NE.-1) WRITE (IOUT,1000) (N,B(N),N=1,NJ) C C 1000 FORMAT (//' KNOTENVERSCHIEBUNGEN'// 1 ' KNOTEN W'/(I10,E15.6)) RETURN END SUBROUTINE SYMSOL(A,B,NN,NEQ) C C ********************************************* C * LOESUNG DER MATRIZENLEICHUNG A*X = B * C * A IST SYMMETRISCH UND QUADRATISCH. * C * DIE LOESUNG X AUF VEKTOR B * C ********************************************* IMPLICIT REAL*8 (A-H,O-Z) COMMON /DATA/INP,IOUT C C---- GAUSS'SCHE ELIMINATION C DIMENSION A(NN,NN),B(NN) NL = NEQ - 1 DO 300 N = 1,NL IF(A(N,N).LE.0.0) GOTO 500 N1 = N + 1 DO 100 J = N1,NEQ 100 A(N,J) = A(N,J)/A(N,N) DO 250 I = N1,NEQ IF(A(N,I).EQ.0.0) GO TO 250 DO 200 J = I,NEQ A(I,J) = A(I,J) - A(I,N)*A(N,J) 200 A(J,I) = A(I,J) 250 B(I) = B(I) - A(N,I)*B(N) 300 B(N) = B(N)/A(N,N) C C RUECKWAERTSEINSETZEN C M = NEQ B(M) = B(M)/A(M,M) DO 400 N = 1,NL M1 = M M = M - 1 DO 400 J = M1,NEQ 400 B(M) = B(M) - B(J)*A(M,J) RETURN 500 WRITE (IOUT,1000) NEQ = -1 RETURN 1000 FORMAT(//' NULL ODER NEG. WERT AUF DER HAUPTDIAGONALEN'/ & ' DER DREIECKZERLEGTEN STEIFIGKEITSMATRIX') END