Da bei der programmtechnischen Umsetzung die Gleichungen z.B. immer nur an einer Kontrollvolumenseite ausgewertet werden (in den
flux-routinen) und über die Routinen zerlegt sind, ist eine Übersicht aus dem Programm schwer zu erhalten. Deswegen soll eine
kurze Erläuterung der Implementierung folgen.
Die neuen, von Elan2 zu berechnenden Größen sind die Verschiebungen und , die
mit V1 und V2 im Programm bezeichnet sind. Damit erhöht sich die Zahl der Variablen von
bisher 15 auf 17, was in der
einzubindenden Datei /COMMONS/param.inc berücksichtigt ist. Die Temperatur ist dagegen bereits vorgesehen.
Die aus den Verschiebungen abgeleiteten Größen, nämlich Verzerrungen und Spannungen,
werden ebenfalls als neue Feldgrößen eingeführt.
Die Verzerrungen, die sich direkt aus den Verschiebungen ableiten lassen, sind zellzentriert gespeichert und
wie folgt bezeichnet: EPSX, EPSY und EPSXY. Sie sind im globalen Koordinatensystem formuliert und
entsprechen den in Gl. 54 eingeführten Verzerrungsgrößen.
Ebenso werden die Spannungen nach dieser Gleichung in Koordinaten eingeführt mit den Bezeichnungen:
TAUXX, TAUYY und TAUXY. Sie
werden nach Gl. 54 mit den
Faktoren AA11, AA12, AA22, BB11, BB12, BB22, CC11, CC12 undCC22
aus den Verzerrungen berechnet. Anders als die Spannungen und Verzerrungen sind diese Werte vorerst blockweise konstant,
allerdings sind bereits Feldvariablen vorgesehen, die veränderliche Materialeigenschaften ermöglichen
werden. Dies sind AAA11, AAA12 ... bis CCC12.
In einer neuen include-Datei structure.inc ist unter anderem die Variable vereinbart, die festlegt, ob es sich bei dem Block j um einen
Struktur- oder Strömungsblock handelt,
dabei gilt für einen Strömungsblock CALSTR(MNB)=0 oder für einen Strukturblock CALSTR(MNB)=1.
Somit muss eine Grenze zwischen Strömung und Struktur immer eine Blockgenze sein!
Im Unterschied zum bisherigen Programm kommen die Materialdaten für Strukturblöcke aus einem neuen file namens MATDAT,
so daß das ursprüngliche Eingabefile, FILIN, nur geringfügig zu erweitern war.
Neben den Änderungen in bereits vorhanden Routinen lag der größte Teil der Arbeit bei der Programmierung
der neuen Berechnungsroutinen.
Es handelt sich um die Unterprogramme bcstruc.f, bcdisp.f, modv1v2.f und
bcforce.f zur Behandlung der Randbedingungen, calcdisp.f als Steuerroutine für die Berechnung der Verschiebungen,
edgeex.f zur speziellen Behandlung der Eckpunkte, fluxedis.f, fluxndis.f und fluxv1v2hk.f, in denen
die Matrixkoeffizienten berechnet werden,
force1ebc.f, force1nbc.f, force2ebc.f, force2nbc.f, force3ebc.f, force3nbc.f und
epssigma.f zur Berechnung der Spannungen.
In der routine bcstruc.f, die als Kopie der routine bcin.f entstanden ist, werden die Randbedingungsarten eingelesen
und eine Kontrolle der Anzahl der Randbedingungen durchgeführt. Abhängig von der Art der Randbedingung werden die
routinen bcdisp.f (bei IBOUND=1, reiner Verschiebungsrand) oder bcforce.f (bei IBOUND=8, Rand mit
mindestens einer Spannungsvorgabe) aufgerufen.
In der Routine bcdisp.f werden vorgegebene Randnormal- und -tangentialverschiebungen eingelesen und
in Verschiebungen in V1 und V2 umgerechnet. Dabei gilt, daß Verschiebungen nach außen
positiv sind. Die Tangentialverschiebungen sind positiv im Sinne eines Rechtskoordinatensystemes mit den
Normalverschiebungen, wobei die Drehachse aus der Ebene herauskommt und die Tangentialrichtung in die
Normalenrichtung zu drehen ist.
Analog dazu liest bcforce.f die Spannungen (nur deren Werte) ein. Die Felder P(IJ) und
TE(IJ) finden dafür Verwendung. Je nach vorhandener Kraftrandart (Kontrollparameter IFORCE(MBLOCK,NSIDE)) werden die
Werte als Normalspannung und Tangentialverschiebung, als Schubspannung und Normalverschiebung oder
als Normal- und Schubspannung interpretiert und ausgewertet.
In der routine calcdisp.f wird die Berechnung der Verschiebungen gesteuert, wobei Aufrufe der Subroutinen
zur Berechnung der Eckwerte der Kontrollvolumen und des gesamten Blockes (edgeex.f) als erstes erfolgen.
Die eigentliche Berechnung der Faktoren des LGS erfolgt in den aufgerufenen fluxroutinen. Randbedingungen und
block-interfaces mit hängenden Knoten werden durch den Aufruf von modv1v2.f behandelt. Nach dem Lösen
des LGS werden die berechneten Werte der Verschiebungen zwischen den Blöcken ausgetauscht (excc.f).
In edgeex.f werden die Verschiebungswerte der Blockecken aus sechs Feldwerten extrapoliert, siehe Bild 5.
Abbildung 5: Extrapolation der Blockecken
Extrapoliert wird mit einem vollständig bilinearem Interpolationspolynom durch die sechs Punkte mit quadratischen Anteilen in und :
wobei die Koefizienten aus einem LGS bestimmt werden, das mittels eines Lösers aus der SCILIB gelöst wird. Dabei findet eine Verschiebung des Koordinatenursprungs in den Punkt statt, so daß der Faktor dem gesuchten Wert entspricht.