Meine Entwicklung von FEM Programmen

Auch auf meine mehrfach durchgeführten Transfer-Aktionen des Lastaufteilungsverfahrens (LAV) möchte ich hier hinweisen. Diese haben schlussendlich zu einer Übersetzung für MINGW (GNU-Fortran)  geführt und wurden vielfach für diese FE-Seiten zur Darlegung der Grafiken geführt. Dies habe ich zur Erinnerung an den Talsperren-Konstrukteur Dipl.Ing. Eiselmayer zu seinem 80.sten Geburtstag gemacht, um seine damalige Ideenwelt aufzuzeigen.
Vergessen soll auch nicht werden, dass viele Ideen für das LAV aus alter Literatur entnommen wurden wie die Heftchen von "Teichmann" im Format 10x15 cm. Dies hat schlussendlich zu einer nicht symmetrischen System-Matrix geführt, was vor allem eine große Sorgfalt bei der Lösung des Eigenwerte-Problems  gebraucht hat.

Buch Statik Teichmann Band 3
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Der Mut zu persönlichen Programmentwicklung kam mit dem Programmsystem TOPAS, eingebettet im Sprachmodul IST. Mein Kollege Rechentechniker Köhler hatte darin Anpassungen durchgeführt wobei ich dabei mitgearbeitet habe. Zur Übergabe von Daten mussten damals an der Siemens Anlage an der Hardware Umbau-Arbeiten durchgeführt werden, was mir äußerst zuwider war.
Prof. Zienkiewicz der FEM Erfinder

Der bedeutendste Einfluss für mich ist damals von Prof. Zienkiewicz gekommen. Er hat mit seinem Buche aus dem Jahre 1977, "The Finite Element Methode, the third expandet and revised edition" ja eine enormen Antrieb in diese Methoden-Entwicklung gebracht. Seine Assistenten Prof. Pande und Prof. Nayler durfte ich während eines Kurzstudiums in Swansea kennenlernen, wo ich auch viele Freunde gewonnen habe.
Auch das Buch von "Dr.Ing. Jürgen Dankert, der Overassistent an der Techn. Hochschule Otto von Guericke" hat mich zu vielen Entwicklungen an der damals fortschrittlichen Rechenanlage der Fa. WANG ermuntert. Dies vor allem an seiner Darlegung der eigenen Matrizen-Methode für diese Analysen.
Viele Anregungen stammen auch aus "Die Statik im Stahlbetonbau, von Dr.Ing. Kurt Beyer, Auflage 1956 von seiner Frau Käte Beyer". Dies ist noch ein Buch im alten Stile und sollte schlussendlich nicht ganz vergessen werden.








Und es entstand mein erstes Programm auf einer WANG Rechenanlage für die Berechnung von 2D und 3D Strukturen.
Leider wurde ich damals als Autor dieser Programme nicht einmal erwähnt und so konnte ich auch viele Dinge aus den Erfahrungen dieser Berechnungen nicht weitergeben! Ein solches FEM-Programm auf einer WANG Anlage zu programmieren war eine große Herausforderung.
 Die verwendete Rechen-Anlage besaß 4x64 kByte Speichermodule und ein Plattenlaufwerk mit 2 Wechselplatten. Als ich das damals meinem Chef erzählt habe, war er sehr ungläubig und hat das eher als einen Scherz betrachtet. Er vertrat die Ansicht, dass man dafür Jahre gebraucht hätte so etwas zu programmieren. Die Basis meines Programms war das Buch von  J. Dankert “Numerische Methoden der Mechanik” aus dem Jahr 1977. Hier wurde eine Matrizen-Methode beschrieben, die in der Matrizen-Sprache der WANG Anlage umgesetzt werden konnte.  Um nur einige Probleme aufzuzeigen sei darauf hingewiesen, dass nur Variablen mit einem Buchstaben und einer Ziffer zulässig waren.
Aus dem 2D Programm entstand dann noch ein Potential-Strömungs-Programm mit Berechnung der freien Oberfläche. Dr. Widmann, damals als Chef-Ingenieur und später Prof.Dr. Heigerth für die Wasseraufgaben zuständig,  hat mich mit Berechnungen  von Unterströmungs-Aufgaben  für Wasserkraftanlagen beauftragt.
Nachfolgend einige Bilder, die aus Vortrags-Dias gescannt wurden.

Wang2D_Sperrenschnitte
 Bild 1 u. 2 ) WANG 2D Statik Analysen Beispiel Sperrenschnitt-Verschiebungen und
                  Sperrenschnitt geringe Wasserlast an der Luftseite  aus dem Jahr 1979

WANG2D_Strömungsbilder
Bild 3 u. 4  ) WANG 2D Strömungs-Analysen mit freier Oberfläche; links Testblock;
             rechts schief gelegener Schnitt von Zillergründl mit Dichtschirm

Auch komplexere Analysen wurden mittels des WANG-Programms ausgeführt wie die Analyse der Hangdurchströmung mit Drainage-Schirm beim ASAGI SEYHAN Projekt bei Yedigöze.

Yedigoeze Dam Sickerung Case 2
                             Bild 5  ) Drucklinien Hangdurchströmung mit Drainage-Schirm beim ASAGI SEYHAN Projekt











Bild 7 ) Ergebnise verschiedener Drainage-Fälle


Wang2D_Schlegeis Analyse
                       Bild 7 ) Analyse eines Schnittes von Promper mittels FIN2D WANG-Programm (4x 64k) für das Leck
                                 in der Sperre Schlegeis aus dem jahre 1982 aus dem Artikel [1]

Die Bilder zeigen die Möglichkeiten des Ausdrucks von damals über einen Plotter mit Tusche-Stiften auf. Bei den Verformungs-Plots wurden die verformte und unverformte Struktur mittels Nägeln verbunden.
Die Isolinien wurden mittels eines dickeren Stiftes gezeichnet. Im Bild 3 wird der Test der freien Oberfläche an einem Rechteck-Gerinne gezeigt. Die Anwendung erfolgt sodann an einem Sperrenschnitt mit Dichtschirm, der schief gelegen ist . Die freie Oberfläche ist links vom Sperrenfuß erkennbar. Dargestellt wurden die Linien gleichen Druckes.
All diese Berechnungen dienten den Betrachtungen von Problemen an der Sperre Kölnbrein. Diese wurde nach dem LAV-Verfahren entworfen. Die Berechnungen wurden an einer Siemens Anlage durchgeführt. In den frühen 70.-er Jahren wurde der PLOT der Spannungen noch händisch aus Dreiecks-Ausdrucken aufgetragen (siehe Unten). Der Entwurf erfolgte noch in dem im LAV eingebundenen Geometrieteil.

1     KOE14B-4-1-3      UE. 1 (3.1+6.1) WSP=1902M   S1/S2/ALPHA(W)-S1/S2/ALPHA(L)   

1.08 2.54 5.54 7.14 6.54 4.64 5.34 6.11 5.12 2.92 1.09
.21 .19 .43 .51 .62 .63 .63 .59 .47 .31 .34
-5.28 .57 -1.20 -1.36 -1.80 -.45 -.92 -1.39 -1.89 -1.27 -7.89
3.46 5.81 5.20 4.60 4.55 4.98 5.00 5.10 4.99 4.54 2.66
.13 .22 .03 .00 -.09 -.05 -.08 -.07 -.01 .11 -.02
-5.24 -4.15 -1.33 1.32 3.89 .78 2.28 1.44 -.89 -3.43 -4.77

-1.21 4.00 7.25 8.81 8.37 7.74 6.41 4.13 .91
-.19 .89 1.33 1.97 2.23 2.04 1.62 1.04 -.06
33.84 -1.05 -6.60 -5.48 -.60 -5.10 -9.45 -5.10 -33.74
9.33 7.40 5.56 5.64 6.44 6.44 6.18 6.40 6.22
1.82 .66 .69 .24 .21 .24 .42 .61 .98
-13.86 -15.30 -5.03 6.49 2.45 4.47 -1.71 -13.93 -13.83

-1.62 4.13 8.48 10.18 8.17 3.77 .73
.15 1.25 2.42 3.71 2.78 1.10 -.11
14.62 -6.37 -8.83 -.55 -7.46 -7.03 -39.39
10.28 8.06 5.63 5.49 6.23 8.13 7.34
2.17 1.33 1.13 .15 .85 1.69 1.97
-16.98 -20.26 -3.33 3.35 -3.82 -18.49 -21.35

-1.41 4.47 8.72 5.30 -.74
.83 1.91 4.30 3.20 .28
7.12 -.81 -1.09 2.52 13.71
8.91 6.71 2.61 6.05 9.43
1.83 1.38 .65 .83 3.20
-23.98 -32.29 10.48 -20.58 -20.43

-1.42 3.92 .51
-.42 1.18 1.37
27.24 7.47 -3.26
1.93 -.63 .68
7.87 4.97 4.51
32.78 -1.74 28.07

.15
-2.01
15.45
-.01
8.38
-1.46

Anfang der 80.-er Jahre wurde zum Geometrieteil des LAV ein Entwurfsteil auf einer WANG Anlage von DI Eiselmayr geschrieben. Dieser ermöglichte auch das PlottKOE14_visit01_03en über einen Tintenplotter in A3.

Danach habe ich begonnen parallel dazu in TOPAS, eingebettet im IST-Kern, (Informations -system Technic) FE Berechnungen mit Köhler durchzuführen. Leider habe ich dazu nur mehr wenige Unterlagen. Es sind später auch schon erste Berechnungen in MARC und in ADAP durchgeführt worden. Für ADAP wurde ein eigener Geometrie-Eingabeteil von mir geschrieben um die Kegelschnittsformen des LAV-Enturfs übernehmen zu können. Für die Darstellungen gab es ein eigenes PASCAL Programm, dass auf einem EGA Schirm eine räumliche Darstellung des Entwurfs ermöglichte. Nachfolgend ein Ausdruck der Kölnbreinsperre aus dem ADAP-Entwurfsprogramm von damals. Die Pascal Programm Ausgabe erfolgte jetzt durch eine Übergabe eines  VTK - Files.
Adap wurde um eine sinnvolle Vorgangsweise bei der Überlagerung von Lastfallen und um einen eigenen Plot erweitert. Bei einem Vergleich mit meiner Disseration CODCOD stellte sich heraus, dass die verwendeten Elemente, wie in meiner Arbeit, korrigiert werden müssen. Bei einem Vergleich von FE-Programmen hat dieses Element die verträglichsten Ergebnisse geliefert.
Meine Dissertation hat dann eine Zusammenfassung der Entwurfsteile, Schnellentwurfsprogramme und eine FE-Berechnungsprogramm für die statische Analyse enthalten.
Jetzt beschäftige ich mich mehr oder minder mit CODE-ASTER

Anschließend zeige ich noch den letzten von mir durchgeführten PLOT aus dem Sperrenentwurfsprogramm von Eiselmayer über HPGL (Transfer nach EPS) aus dem Jahr 1998. Sehr schön sind hier auch die Wendelungen der Blockfugen zu erkennen. Es wurde die linke und rechte Hälfte des Grundrisses immer getrennt dargestellt, da die Geometrie-Daten nach den Mauerhälften aufgelistet waren.
WANG
                PLot Betonirschichten mit Blockfugen

Heute glaubt man nicht, dass dies ein Computer war. Eine alte WANG 720 auf der auch Plots für die Talsperren ausgeführt wurden.

WANG 720 Anlage

Es ist kaum zu glauben was damit alles gemacht wurde. Zwei Zeilen mit “gewickelten Glühlampen Ziffern” waren zur Anzeige möglich und ein Bandlaufwerk zum Sichern.
Hier will ich noch eine WANG-2200-Anlage zeigen, wie auch wir sie gehabt haben. Dieses Foto ist von einem Kollegen aus dem Internet, der ebenfalls eine typgleiche Maschine besessen hat . Daraufgestellt wurden 2 Diskettenlaufwerke. Wir hatten dazu noch 2 Plattenlaufwerke.

WANG 2200

Der 1. Teil des Listungs meines 2D-FE WANG-2200 Programms wird nachfolgend angeführt, um die Programmierung mit WANG-BASIC aufzuzeigen. Die Ausdrucke erfolgten mit einer WANG-Simulierung auf einem Alt-PC. Für die Variablen war ein Buchstabe und eine Ziffer möglich. Auch räumliche Talsperren-Nachrechnungen habe mit 3D-FE  mehrmals (3x) gerechnet.

0005 REM **********************************************
 0010 REM F E M - BELASTUNGSVEKTOR VOM VIERECKELEMENT 4/8
 0012 REM ***********************************************
 0015 REM VERSION 1 / PRO 02-11-1981
 0020 SELECT D
   : REM RED DER POSITION ... W
 0025 COM W,Z0,F0,B1,S1,S3,Z9,S9,A$(34,20)1,Z0$20,V(1200),A1$(2)30,K$(600)8,E$(3
     00)18,P0$3,P1$3,P2$3,P3$3,P4$3,D1(20,7),V8
 0030 DIM A2$8,L$(200)24,X(2,8),K(9),H2$(2)2,H3$2,K3$3,H(2,2),P(8),P0(16),P5$3,A
     5$7,B(3,6),D(3,3),D2(3,6),D3(3,3),T1(3,3),S(2,2),S1(8),S3(2,2),S4(2,8),Q(3
     ),X3(4),Y3(4),X4(2),Y4(2),F1(2),Y(2,2),X1(8),Y1(8),N(2),H1(2)
   : COM CLEAR L$()
 0035 P0$="005"
   : P1$="215"
   : P2$,P3$="B20"
   : P4$="B20"
   : M0=8
   : N3=4
-0037 DATA -1,-1,0,-1,1,-1,1,0,1,1,0,1,-1,1,-1,0
   : RESTORE LINE 37
   : FOR I=1 TO M0
   : READ X1(I),Y1(I)
   : NEXT I
   : H1=1/SQR(3)
   : H2=I+I-1
   : X3(I)=X1(H2)*H1
   : Y3(I)=Y1(H2)*H1
   : NEXT I
 0040 LINPUT " DRUCKERADRESSE    ",-P1$
   : LINPUT " PROGRAMMDISKETTE  ",-P2$
   : LINPUT " DATENDISKETTE     ",-P3$
   : LINPUT " RECHENPLATTE      ",-P4$
   : SELECT #1<P2$>,#2<P3$>,#4<P4$>
   : LINPUT " DATEI FUER GLEICHUNG  ",-A2$
 0045 REM KENNSATZ LADEN
   : A5$="DATKEN" & STR(A2$,6,1)
   : DATA LOAD DC OPEN T#4,A5$
   : DATA LOAD DC #4,W,Z0,F0,B1,S1,S3,Z9,S9,Z0$,A$(),A2$
 0050 REM LADEN DER GEOMETRIE
   : INPUT " DATEI FUER GEOMETRIE ",A4$
   : DATA LOAD DC OPEN T#2,A4$
   : DATA LOAD DC #2,A1$(1),D1(),K$(),E$(),A3$,E,E1
   : REM DATA LOAD DC #2,K$(),E$()
   : DATA SAVE DC CLOSE #2
 0100 H1=2
   : INPUT " BELASTUNG EINGEBEN = 1 ODER VON DER PLATTE HOLEN = EXEC ",H1
   : IF H1=1 THEN 105
   : INPUT " NAME DER BELASTUNGSDATEI ",A4$
   : DATA LOAD DC OPEN T#2,A4$
   : DATA LOAD DC #2,A1$(2),L$()
   : DATA SAVE DC CLOSE #2
   : GOTO 208
-0105 REM LASTEINGABE
   : INPUT " NAME DES LASTFALLES ",A1$(2)
   : I1=0
   : MAT V=ZER
   : L$()=ALL(00)
-0110 I1=I1+1
   : L1,L2,L3,L4,L5,L6,L7=0
   : INPUT " BELASTETES ELEMENT (ANFANGSELEMENT) UND LASTART ",L1,L2
   : IF L1>900 THEN 200
   : IF L2=3 OR L2=4 THEN INPUT " ELEMENTGRUPPENENDE ",L6
   : ON L2 GOTO 120,120,130,140,150,160,160
-0120 INPUT " BELASTETE SEITE , P1 ,P2 ",L3,L4,L5
   : GOTO 190
-0130 INPUT " VOLUMSLAST IN X- UND Y- RICHTUNG ",L4,L5
   : GOTO 190
-0140 INPUT " TEMPERATURKOEFFIZIENT ",H3
   : INPUT " TEMPERATUR AN DEN KNOTENPUNKTEN ,K1,K2,K3,K4",L4,L5,L6,H2
   : L4=(L4+L5+L6+H2)*H3/4
   : L5=0
   : GOTO 190
-0150 INPUT " DEHNUNGEN AN DEN KNOTENPUNKTEN ,K1,K2,K3,K4",L4,L5,L6,L7
   : GOTO 190
-0160 INPUT " HORIZONTALER WERT , VERTIKALER WERT ",L4,L5
-0190 REM LASTVERSCHLUESSELUNG
   : PACK(####) STR(L$(I1),,2) FROM L1
   : PACK(##) STR(L$(I1),3,2) FROM L2,L3
   : PACK(+#.####^^^^) STR(L$(I1),5,20) FROM L4,L5,L6,L7
   : GOTO 110
-0200 INPUT " NAME DER BELASTUNGSDATEI ",A4$
   : DATA SAVE DC OPEN T#2,(30)A4$
   : ERROR I1=ERR
   : IF I1=83 OR I1=86 THEN DATA SAVE DC OPEN T#2,(A4$)A4$
   : ERROR I1=ERR
   : GOSUB 1000
   : PRINT
   : IF I1=84 THEN PRINT " FILE NOT SCRATCHED"
   : STOP
 0202 DATA SAVE DC #2,A1$(2),L$()
   : DATA SAVE DC #2,END
   : DATA SAVE DC CLOSE #2
-0208 REM KNOTENPUNKTSLASTBERECHNUNG
   : GOSUB 3000
   : I1=0
   : MAT V=ZER
-0210 I1=I1+1
   : REM ENTSCHLUESSELN DER LASTDATEN
   : UNPACK(####) STR(L$(I1),,2) TO L1
   : PRINT I1,L1
   : IF L1=0 THEN 800
   : UNPACK(##) STR(L$(I1),3,2) TO L2,L3
   : UNPACK(+#.####^^^^) STR(L$(I1),5,20) TO L4,L5,L6,L7
 0220 ON L2 GOTO 225,250,300,300,400,450,500
-0225 REM DRUCK AUF SEITE
   : S3(1,1)=L4
   : S3(1,2)=L5
   : S3(2,1),S3(2,2)=0
-0230 REM TRAPEZLAST AUF EINE SEITE
   : GOSUB 6200
   : C1=0
   : GOSUB 6100
   : ON L3 GOTO 231,232,233,234
-0231 REM SEITE 1
   : Q(1)=1
   : Q(2)=2
   : Q(3)=3
   : X4(1)=X3(1)
   : X4(2)=X3(2)
   : Y4(1),Y4(2)=-1
   : GOTO 235
-0232 REM SEITE 2
   : Q(1)=3
   : Q(2)=4
   : Q(3)=5
   : X4(1),X4(2)=1
   : Y4(1)=Y3(2)
   : Y4(2)=Y3(3)
   : GOTO 235
-0233 REM SEITE 3
   : Q(1)=5
   : Q(2)=6
   : Q(3)=7
   : X4(1)=X3(3)
   : X4(2)=X3(4)
   : Y4(1),Y4(2)=1
   : GOTO 235
-0234 REM SEITE 4
   : Q(1)=7
   : Q(2)=8
   : Q(3)=1
   : X4(1),X4(2)=-1
   : Y4(1)=Y3(4)
   : Y4(2)=Y3(1)
-0235 REM SPANNUNGSBERECHNUNG AN DEN INTEGRATIONSPUNKTEN
   : MAT S=ZER
   : FOR I5=1 TO 2
   : FOR I=1 TO 2
   : FOR J=1 TO 2
   : S(I5,I)=S(I5,I)+S3(I5,J)*FNV(2*J-1)
   : NEXT J,I,I5
 0237 REM KNOTENPUNKTSINTEGRATION AUS OBERFLAECHENLASTEN
   : MAT P0=ZER
   : FOR I5=1 TO 2
   : GOSUB '40(X4(I5),Y4(I5))
   : ON L3 GOTO 240,242,240,242
-0240 F1(1)=Y(1,1)
   : F1(2)=Y(1,2)
   : H1=1/SQR(F1(1)^2+F1(2)^2)
   : IF L3=3 THEN MAT F1=(-1)*F1
   : GOTO 245
-0242 F1(1)=Y(2,1)
   : F1(2)=Y(2,2)
   : H1=1/SQR(F1(1)^2+F1(2)^2)
   : IF L3=4 THEN MAT F1=(-1)*F1
-0245 FOR J1=1 TO M0
   : H1=J1+J1-1
   : P0(H1)=P0(H1)+(S(1,I5)*F1(2)-S(2,I5)*F1(1))*S1(J1)
   : H1=H1+1
   : P0(H1)=P0(H1)+(-S(1,I5)*F1(1)-S(2,I5)*F1(2))*S1(J1)
   : NEXT J1,I5
   : REM MAT PRINT P0
-0247 IF L2=3 THEN PRINT " ELEMENT ",I4
   : FOR I=1 TO M0
   : H6=F0*P(I)-F0+1
   : H7=F0*I-F0+1
   : FOR J=0 TO F0-1
   : V(H6+J)=V(H6+J)+P0(H7+J)
   : PRINT V(H6+J);
   : NEXT J,I
   : PRINT
   : IF L2=3 THEN NEXT I4
   : GOTO 210
-0250 REM SCHUB AUF EINE SEITENKANTE
   : GOSUB 6200
   : C1=0
   : GOSUB 6100
   : S3(2,1)=-L4
   : S3(2,2)=-L5
   : S3(1,1),S3(1,2)=0
   : GOTO 230
-0300 REM VOLUMSLASTEN
   : FOR I4=L1 TO L6
   : GOSUB 6300
   : C1=0
   : GOSUB 6100
   : MAT P0=ZER
   : FOR I5=1 TO N3
   : GOSUB '40(X3(I5),Y3(I5))
   : FOR J1=1 TO M0
   : H1=J1+J1-1
   : P0(H1)=P0(H1)+L4*X*S1(J1)
   : H1=H1+1
   : P0(H1)=P0(H1)+L5*X*S1(J1)
   : NEXT J1,I5
   : GOTO 247
 0350 REM TEMPERATURBELASTUNG
 0360 MAT B=ZER
   : MAT REDIM D2(3,3)
   : X(1,5)=X(1,2)
   : X(2,5)=X(2,2)
   : FOR I=1 TO 3
   : B(1,2*I-1),B(3,2*I)=(X(2,I+1)-X(2,I+2))/F
   : B(2,2*I),B(3,2*I-1)=(X(1,I+2)-X(1,I+1))/F
   : NEXT I
   : I3=0
-0370 REM SPANNUNGS DEHNUNGSBEZ
   : I3=I3+1
   : IF I3>M1 THEN PRINT " *** ERROR MATERIALDATEN ELE";K(1)
   : IF K(1)<D1(I3,1) OR K(1)>D1(I3,2) THEN 370
   : D2(1,1)=D1(I3,3)
   : D2(1,2),D2(2,1)=D1(I3,4)
   : D2(1,3),D2(3,1)=0
   : D2(2,2)=D1(I3,5)
   : D2(2,3),D2(3,2)=0
   : D2(3,3)=D1(I3,6)
 0380 H2=D1(I3,7)
   : H1=SIN(H2)
   : H2=COS(H2)
   : T1(1,1),T1(2,2)=H2*H2
   : T1(1,2),T1(2,1)=H1*H1
   : H3=H1*H2
   : T1(3,1)=H3
   : T1(3,2)=-H3
   : T1(2,3)=H3
   : T1(3,3)=H2*H2-H1*H1
   : MAT D3=T1*D2
   : MAT D2=TRN(T1)
   : MAT T1=D3*D2
   : MAT REDIM D(1,3),D2(1,3),D3(1,6)
   : D(1,1),D(1,2)=L4
   : D(1,3)=0
   : MAT D2=D*T1
   : PRINT "ELE ";K(1)
 0390 MAT PRINT D2
   : MAT D3=D2*B
   : MAT D3=(F/2)*D3
   : FOR I=1 TO 3
   : H3=I+I-1
   : H1=F0*P(I)-F0+1
   : FOR H4=0 TO F0-1
   : V(H1+H4)=D3(1,H3+H4)+V(H1+H4)
   : NEXT H4
   : PRINT P(I)+W,V(H1),V(H1+1)
   : NEXT I
   : MAT REDIM D(3,3),D2(3,6),D3(3,3)
   : PRINT
   : PRINT
   : NEXT I4
   : GOTO 210
-0400 REM AUSGANGSDEHNUNGSZUSTAND
-0450 REM EINGEPRAEGTE VERSCHIEBUNG
   : K(4)=L1
   : L2=2
   : GOSUB 6100
   : H1=P(3)
   : UNPACK(+#.#####^^^^) STR(L$(I1),5,10) TO L4,L5
   : IF L4=999 THEN 460
   : V(F0*H1-F0+1)=L4*1E50
-0460 IF L5=999 THEN 470
   : V(F0*H1-F0+2)=L5*1E50
-0470 PRINT F0*H1-F0+1,V(F0*H1-F0+1);
   : IF F0>1 THEN PRINT V(F0*H1-F0+2)
   : PRINT
   : GOTO 210
-0500 REM KNOTENPUNKTSLASTEN
   : K(4)=L1
   : L2=2
   : GOSUB 6100
   : H1=P(3)
   : UNPACK(+#.#####^^^^) STR(L$(I1),5,5) TO L4,L5
   : V(F0*H1-F0+1)=L4
   : V(F0*H1-F0+2)=L5
   : PRINT F0*H1-F0+1,V(F0*H1-F0+1);
   : IF F0>1 THEN PRINT V(F0*H1-F0+2)
   : PRINT
   : GOTO 210
-0800 V8=1
   : PRINT " DIE LASTFALLBERECHNUNG IST ABGESCHLOSSEN "
   : INPUT " KEY-RETURN ZUM LADEN DES VOR UND RUECKWAERTSEINSETZENS",H1
   : LOAD T#1,"FE2VER" 0,9998 BEG 10
   : STOP
 0900 DEFFN'40(X1,Y1)
   : REM BERECHNUNG DER FORMFUNKTION UND DEREN ABLEITUNGEN IN NATUERLICHEN KOOR
     DINATEN
 0910 FOR I=1 TO M0
   : H4=X1(I)
   : H5=Y1(I)
   : H1=1+H4*X1
   : H2=1+H5*Y1
   : IF H4=0 OR H5=0 THEN 930
 0920 S1(I)=H1*H2*(H1+H2-3)*.25
   : S4(1,I)=H2*(H2+H1+H1-3)*H4*.25
   : S4(2,I)=H1*(H1+H2+H2-3)*H5*.25
-0930 IF H4<>0 THEN 940
   : H7=1-X1*X1
   : S1(I)=H2*H7*.5
   : S4(1,I)=-X1*H2
   : S4(2,I)=H5*H7*.5
-0940 IF H5<>0 THEN 945
   : H7=1-Y1*Y1
   : S1(I)=H1*H7*.5
   : S4(1,I)=H4*H7*.5
   : S4(2,I)=-Y1*H1
-0945 NEXT I
 0950 REM BERECHNUNG DER JAKOBISCHEN TRANSFORMATION VON X,Y NACH XSI,ETA
   : FOR I=1 TO 2
   : FOR J=1 TO 2
   : Y(I,J)=0
   : FOR K=1 TO M0
   : Y(I,J)=Y(I,J)+X(J,K)*S4(I,K)
   : NEXT K,J,I
 0960 REM BERECHNUNG DER JAKOBISCHEN DETERMINANTE X
   : MAT H=INV(Y),X
   : REM TRANSFORMATION NATUERLICHER ABLEITUNGEN NACH XY, ABLEITUNGEN
   : FOR I=1 TO M0
   : N(1)=S4(1,I)
   : N(2)=S4(2,I)
   : MAT H1=H*N
   : S4(1,I)=H1(1)
   : S4(2,I)=H1(2)
   : NEXT I
   : RETURN
-1000 P5$=P0$
   : GOTO 1020
-1010 P5$=P1$
-1020 SELECT PRINT <P5$>
   : RETURN
-3000 REM AUSDRUCK DER BELASTUNG
   : H1=2
   : INPUT " ANZEIGE AM BILDSCHIRM = 1 / ODER AUSDRUCK = EXEC ",H1
   : IF H1=2 THEN GOSUB 1010
   : ELSE GOSUB 1000
   : PRINT HEX(0D0A0E),A1$(1),HEX(0D0A0E),A1$(2),HEX(0D0A0E),"LASTTAFEL",HEX(0D
     0A),"  ELE TYP          W1            W2            W3            W4   
             W5"
 3005 H2=0
-3010 H2=H2+1
   : UNPACK(####) STR(L$(H2),,2) TO L1
   : UNPACK(##) STR(L$(H2),3,2) TO L2,L3
   : UNPACK(+#.####^^^^) STR(L$(H2),5,15) TO L4,L5,L6
   : IF L1=0 THEN 3020
   : PRINTUSING 7010,L1,L2,L3,L4,L5,L6,L7
   : GOTO 3010
-3020 GOSUB 1000
   : RETURN
-3100 INPUT " I = ",I
   : HEXPRINT STR(L$(I),,24)
   : NEXT I1
   : PRINT
   : GOTO 3100
 5000 DEF FNV(J)=(1+X1(Q(J))*X4(I))*(1+Y1(Q(J))*Y4(I))/4
-6100 C1=C1+1
   : PACK(####) K3$ FROM K(C1+1)
   : MAT SEARCH K$(),=STR(K3$,,2) TO H2$() STEP 8
   : IF H2$(1)=HEX(0000) THEN RETURN
   : L1=INT(VAL(H2$(1),2)/8)+1
   : P(C1)=L1-W
   : UNPACK(####) STR(K$(L1),,2) TO P
   : UNPACK(+###.##) STR(K$(L1),3,6) TO X(1,C1),X(2,C1)
   : IF C1<8 THEN 6100
   : RETURN
-6200 REM ELEMENTSUCHE
   : L1=0
   : MAT SEARCH E$(),=STR(L$(I1),,2) TO H2$() STEP 18
   : IF H2$(1)=HEX(0000) THEN RETURN
   : L1=INT(VAL(H2$(1),2)/18)+1
   : UNPACK(####) E$(L1) TO K()
   : RETURN
-6300 REM ELEMENTSUCHE
   : PACK(####) H3$ FROM I4
   : I2=0
   : MAT SEARCH E$(),=H3$ TO H2$() STEP 18
   : IF H2$(1)=HEX(0000) THEN RETURN
   : I2=INT(VAL(H2$(1),2)/18)+1
   : UNPACK(####) E$(I2) TO K()
   : RETURN
 7000 GOSUB 1010
   : FOR W1=1 TO Z9
   : H1=(W1-1)*3
   : IF H1>57 THEN H1=H1-57
   : PRINT TAB(H1);
   : FOR W2=1 TO S9
   : PRINTUSING 7005,VAL(A$(W1,W2));
   : NEXT W2
   : PRINT
   : NEXT W1
   : PRINT
   : GOSUB 1000
   : RETURN
-7005 %####
-7010 % #### # +#####.###### +#####.###### +#####.###### +#####.###### +#####.#
     #####
 7777 PRINT S4(I1,I),S3(I1,J),FNV(2*J-1),2*J-1
   : STOP
 8000 FOR I=1 TO 20
   : PRINT I,,V(I+I-1),V(I+I)
   : NEXT I
   : STOP
 9100 DEFFN'16 "SCRATCH T #1,";HEX(22);"FE2LAST";HEX(22);":SAVE DC T$ #1,()";HEX
     (22);"FE2LAST";HEX(22)
 9300 DEFFN'19 "D1(1,1)=1:D1(1,2)=1000:D1(1,3),D1(1,5)=2000000:D1(1,4)=200000:D1
     (1,8)=800000:M1=1"
SELECT R, ERROR >60, ROUND, P, LINE 24
SELECT CI /001, INPUT /001, PLOT /000, TAPE /000
SELECT PRINT /005(80), LIST /015(80), CO /005(80)
SELECT DISK /310

FILE ADDRESS FILE-NAME   START  CURRENT     END
         * NO OPEN FILES *
$DEVICE(/004) = "/dev/prn"
$DEVICE(/015) = "D:/B2C/F2START.prt"
$DEVICE(/D10) = "A:"
$DEVICE(/D11) = "D:/B2C/FEMELE3.BS2"
$DEVICE(/D12) = "platter2.bs2"
Program Load Sequence:FE2LAST


Auch die neueren CAD-Produkte sollen hier angeführt werden. Damals war CADKEY eigentlich ein sehr dominierendes 3D-Produkt mit dem gut gearbeitet werden konnte. Nachfolgend die alte EGA-Version mit der von mir geschriebenen VGA Auflösung und eine Darstellung schon auf höher auflösenden Schirmen 1996.

      CADKEY alte EGA Version

Dabaklamm Projekt 3d Darstellung in CADKEY
 
Heute sind dies Produkte -- wie hier mit Turbocad 2D/3D im Layout-Modus dargestellt -- sehr ansprechend und erlauben ein bequemes Arbeiten im 3D-Bereich

Dabaklamm in FIN3D einem modernen 3D CAD Programm

[1] H.Stäuble; The behaviour of the Schlegeis arch dam and the measures taken to improve it,
        Safety of Dams,  J.Laginha Serafim, University of Coimbra, Portigal, (1984) 115-121