Aus technischen Gründen bleibt diese Seite leer
Arno Lowe
Chemische Reaktionstechnik mit MATLAB und SIMULINK
Aus technischen Gründen bleibt diese Seite leer
Arno Lowe
Chemische Reaktionstechnik mit MATLAB und SIMULINK
@WILEY-VCH Weinheim * New York * Chichester Brisbane . Singapore Toronto
Univ.-Prof. i . R . Dr. Arno Lowe Ahornweg 10 97267 Himmelstadt
Das vorliegende Werk wurde sorgfaltig erarbeitet. Dennoch ubernehmen Autor und Verlag fur die Richtigkeit von Angaben, Hinweisen und Ratschlagen sowie fur eventuelle Druckfehler keine Haftung.
Verzicht: Dieses eBook enthält keine begleitenden Medien, die mit der gedruckten Version des Buches verpackt wurden.
Die Deutsche Bibliothek - CIP-Einheitsaufnahme Ein Titeldatensatz fur diese Publikation ist bei Die Deutsche Bibliothek erhaltlich
ISBN 3-527-30268-9
0 WILEY-VCH Verlag GmbH, D-69469 Weinheim (Federal Republic of Germany), 2001
Gedruckt auf saurefreiem Papier. Alle Rechte, insbesondere die der Ubersetzung in andere Sprachen, vorbehalten. Kein Teil dieses Buches darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form - durch Photokopie, Mikroverfilrnung oder irgendein anderes Verfahren - reproduziert oder in eine von Maschinen, insbesondere von Datenverarbeitungsmaschinen, verwendbare Sprache iibertragen oder ubersetzt werden. Die Wiedergabe von Warenbezeichnungen, Handelsnamen oder sonstigen Kennzeichen in diesem Buch berechtigt nicht zu der Annahme, daR diese von jedermann frei benutzt werden durfen. Vielmehr kann es sich auch dann um eingetragene Warenzeichen oder sonstige gesetzlich geschutzte Kennzeichen handeln, wenn sie nicht eigens als solche markiert sind. All rights reserved (including those of translation into other languages). No part of this book may be reproduced in any form - by photoprinting, microfilm, or any other means - nor transmitted or translated into a machine language without written permission from the publishers. Registered names, trademarks, etc. used in this book, even when not specifically marked as such, are not to be considered unprotected by law. Druck: Strauss Offsetdruck, D-69509 Morlenbach Bindung: GroRbuchbinderei J. Schiffer, D-67269 Grunstadt Printed in the Federal Republic of Germany
Herrn Professor Dr. KURTDIALER zum 80. Geburtstag gewidmet
Aus technischen Gründen bleibt diese Seite leer
Inhalt sverzeichnis Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XI11
Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.1 Schriftauszeichnung . . . . . . . . . . . . . . . . . . . . . . . . . 0.2 Symbolverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . 0.3 Abkiirzungsverzeichnis . . . . . . . . . . . . . . . . . . . . . . .
XIX XIX
XX XXIII
1
Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
MATLAB und SIMULINK . . . . . . . . . . . . . . . . . . . . . . .
5 5 6 6 7 8 9 10 17 23 23 23 23 24
2.1 Einfiihrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Kostproben aus MATLABs Programmiertechniken . . . . . . . . 2.2.1 Vektorisierung . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Matrizenmanipulation . . . . . . . . . . . . . . . . . . . . . 2.2.3 Zeichenkettenverarbeitung . . . . . . . . . . . . . . . . . . . 2.2.4 MATLABs Befehl eual . . . . . . . . . . . . . . . . . . . . . 2.3 MATLAB-Programme oder SIMULINK-Modelle? . . . . . . . . . 2.4 S-Funktionen, C und FORTRAN . . . . . . . . . . . . . . . . . . . 2.5 Erweiterungen und Toolboxen . . . . . . . . . . . . . . . . . . . . . 2.5.1 MATLAB-Compiler . . . . . . . . . . . . . . . . . . . . . . . 2.5.2 optimization Toolbox . . . . . . . . . . . . . . . . . . . . . . 2.5.3 Symbolic Math Toolbox . . . . . . . . . . . . . . . . . . . . . 2.5.4 Weitere Toolboxen . . . . . . . . . . . . . . . . . . . . . . . 3
Stochiometrie. Thermodynamik. Reaktionskinetik: Drei Saulen der CRT . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Stochiometrische Gleichungen (Lineare Algebra) . . . . . . . . . . 3.1.1 Stochiometrische Gleichungen aus der Element-SpeziesMatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Stochiometrische Gleichungen aus der stochiometrischen Matrix chemischer Reaktionen . . . . . . . . . . . . . . . . 3.1.3 Beispiel: Katalytische Dampfspaltung von Methan zu Synthesegas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Thermodynamische Gleichgewichte (Nichtlineare AGls) . . . . .
25 25 25 34 38 40
VIII
Inhaltsverzezchnzs
3.3 Reaktionskinetik (Gewohnliche. auch steife DGls; DAGls) . . . . 3.3.1 Wichtige reaktionskinetische GroBen und Beziehurigen . . 3.3.2 Komplexe Reaktionssysteme (DGls) . . . . . . . . . . . . . 3.3.2.1 Analytische Losung . . . . . . . . . . . . . . . . . . 3.3.2.2 Numerische Losung . . . . . . . . . . . . . . . . . . 3.3.2.3 SIMULINK-Block-Model1 . . . . . . . . . . . . . . 3.3.2.4 SIMULINK-Model1 mit M-File S-Funktion . . . . 3.3.2.5 SIMULINK-Model1 mit C MEX-File S-Funkction . . . . . . . . . . . . . . . . . . . . . . . 3.3.2.6 SIMULINK-Model1 mit compilierter M-File S-Function . . . . . . . . . . . . . . . . . . . 3.3.3 Beispiel: Spaltung von Kohlenwasserstoffen . . . . . . . . . 3.3.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Probleme und Losungen . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Wahl von Nichtschlusselkomponenten (*) . . . . . . . . . . 3.4.2 Korrespondierende Manipulation von ESM und Spezies-Vektor (** bis ***; * wenn STOICH als Vorlage benutzt wird) . . . . . . . . . . . . . . . . . . . . . 3.4.3 Erzeugung einer String-Matrix aus einem Reaktionsmechanismus (*) . . . . . . . . . . . . . . . . . . . 3.4.4 Automatische Genericrung der Reaktionsmatrix fur einen Reaktionsmechanismus (Chemischer Compiler 1) (***) . . . . . . . . . . . . . . . . 3.4.5 Automatische Generierung der Geschwindigkeitsgleichungen fur einen Elementarmechanisnius (Chemischer Compiler 2) (**) . . . . . . . . . . . . . . . . . 3.4.6 Wasserdampfsattiger (*) . . . . . . . . . . . . . . . . . . . . 3.4.7 Synthesegaszusammensetzung aus der Analyse des trockenen Produktgases (*) . . . . . . . . . . . . . . . . . . 3.4.8 Uberprufung eines Reaktionsgemisches am Reaktorausgang auf Gleichgewicht (*) . . . . . . . . . . . . 3.4.9 Gleichgewicht am Reaktorausgang (*) . . . . . . . . . . . . 3.4. 10 Rechengeschwindigkeit mit vollen und sparsen Matrizen im Vergleich (*) . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.11 Molwarme eines realen Gases (*) . . . . . . . . . . . . . . . 3.4.12 SIMULINK-Model1 der Ethan-Spaltung mit MATLAB-Fcn-Block (**) . . . . . . . . . . . . . . . . . . . 3.4.13 SIMULINK-Model1 der Ethan-Spaltung mit Fcn-Blocken (**. SE bedingt) . . . . . . . . . . . . . . . . . 3.4.14 SIMULINK-Model1 der Ethan-Spaltung mit S-Funktion (**) . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.15 Einfaches System aus nichtlinearen algebraischen urid Differential-Gleichungen (DAE- oder DAG1-System) (*) .
43 43 45 46 46 52 54 55
62 63 67 68 68
69 70
70
72 73 75 78 81 84 84 86 88
90 96
Znhaltsverzeichnis
4
Ruhrkesselreaktoren . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IX
101 4.1 Batch-Reaktor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.1.1 Stoff- und Energiebilanzen . . . . . . . . . . . . . . . . . . . 103 4.1.2 Beispiel: Zweistufiger ProzeB (DAG1-Systeme mit Unstetigkeiten) . . . . . . . . . . . . . . . . . . . . . . . . . . 104 111 4.2 Semibatch-Reaktor . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Stoff- und Energiebilanzen . . . . . . . . . . . . . . . . . . . 111 4.2.2 Beispiel: Reaktionskalorimeter . . . . . . . . . . . . . . . . 111 4.3 Konti-Reaktor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 4.3.1 Stoff- und Energiebilanzen . . . . . . . . . . . . . . . . . . . 123 4.3.2 Beispiel: Optimierung einer Losungs-Copolymerisation in einer vierstufigen Ruhrkesselkaskade . . . . . . . . . . . 123 4.4 Probleme und Losungen . . . . . . . . . . . . . . . . . . . . . . . . 128 4.4.1 Losung eines DAG1-Systems durch Kombination von DG1- und algebraischen Gleichungslosern (*) . . . . . . . . 128 4.4.2 Losung eines reaktionskinetischen DAG1-Systems durch Uberfuhrung der Gleichgewichtsbeziehungen in kinetische Gleichungen (*) . . . . . . . . . . . . . . . . . . . 131 4.4.3 Losung eines DAG1-Systems uber Differentiation der algebraischen Gleichungen (**) . . . . . . . . . . . . . . . . 133 4.4.4 Losung des DAG1-Systems 4.4.1 mit einem DAG1-Loser von MATLAB a b Version 5.3 . . . . . . . . . 135 4.4.5 Losung des DAG1-Systems 4.4.1 mit SIMULINK unter Verwendung eines externen DAG1-Losers (***) . . . 136 4.4.6 Einstellen der Regler am Reaktionskalorimeter fur die Sulfonierung von Nitrobenzol (*, nicht SE) . . . . . . . . . 148 4.4.7 Verlust leistung des Reakt ionskalorimeters bei den Bedingungen des Problems 4.4.6 (*, nicht SE) . . . . . . . 149 4.4.8 Sulfonierung von Nitrobenzol mit Oleum im leistungskompensierten Reaktionskalorimeter mit Differentialkuhlung (*, nicht SE) . . . . . . . . . . . . . . . 150 4.4.9 Warmeubergangskoeffizienten im wandgekuhlten Ruhrkessel durch Modellversuche im Reaktionskalorimeter (*, nicht SE) . . . . . . . . . . . . . . . . . . . . 153 4.4.10 Produktivitatssteigerung bei einer technischen Cyanethylierung (**) . . . . . . . . . . . . . . . . . . . . . . 153 4.4.11 Produktivitatssteigerung bei einer technischen Cyanethylierung (2): optimale Dosierzeit bei konstanter Dosierrate (*) . . . . . . . . . . . . . . . . . . . . 158 4.4.12 CSTR - Chemostat (*) . . . . . . . . . . . . . . . . . . . . . 158 4.4.13 Exotherme Reaktion im wandgekuhlten CSTR (**) . . . . 160 4.4.14 Styrolpolymerisation im CSTR (***) . . . . . . . . . . . . 163 4.4.15 Einstellen der Zustrome in einem konzentrationsgeregelten Differential-Kreislaufreaktor (**) . . . . . . . . 173 4.4.16 SIMULINK-Model1 einer Destillationskolonne anhand der MESH-Gleichungen (***, nicht SE) . . . . . . 175
x 5
Inhaltsverreichnzs
Festbettreaktor . einphasige Modelle . . . . . . . . . . . . . . . . 5.1 Noch einmal Stochiometrie . . . . . . . . . . . . . . . . . . . . . . . 5.2 FBR mit axialer Dispersion . . . . . . . . . . . . . . . . . . . . . . 5.2.1 h.Iodellgleichungen und Diskussion der Randbedingungen . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2 SchuDverfahren und Diskretisierung . . . . . . . . . . . . . 5.2.3 h4ehrzielmethode (Bulirsch’sehes Randwertprobleni) . . . 5.3 Instationarer FBR mit axialer Dispersion . . . . . . . . . . . . . . 5.4 FBR mit radialer Dispersion . . . . . . . . . . . . . . . . . . . . . . 5.4.1 I\iIodellgleichungen und Randbedingungen . . . . . . . . . . 5.4.2 Methode der finiten Bilanzvolumina (Finite Volumenmethode) . . . . . . . . . . . . . . . . . . . 5.4.3 Linienmethode . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.4 Orthogonale Kollokation . . . . . . . . . . . . . . . . . . . . 5.5 Problcme und Losungen . . . . . . . . . . . . . . . . . . . . . . . . 5.5.1 Aufstellen der Stofiilanzen fur die katalytische Methanisierung im isothermen FBR (*) . . . . . . . . . . . 5.5.2 Gleichgewichtsberechnungen durch Losen von Reaktorgleichungen bei groi3er Verweilzeit (*) . . . . . . . 5.5.3 Oxidation von 0-Xylol im idealen FBR (*) . . . . . . . . . 5.5.4 Radiale Temperaturprofile im FBR in parabolischer Naherung (*) . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.5 SIMULINK-Model1 fur den FBR mit beliebigen Reaktionen (***, nicht SE) . . . . . . . . . . . . . . . . . . 5.5.6 EinfluD axialer Dispersion (**) . . . . . . . . . . . . . . . . 5.5.7 Auswertung von Verweilzeitmessungen in cincm Festbettreaktor (*) . . . . . . . . . . . . . . . . . . . . . . . 5.5.8 Konzentrations- und Temperaturprofile im adiabatischen FBR mit axialer Dispersion (**) . . . . . . 5.5.9 FBR mit periodischer Stromungsumkehr (**) . . . . . . . 5.5.10 Simulation eines FBR nach dem zweidimensionalen Modell mit Hilfe der FVM (**) . . . . . . . . . . . . . . . . 5.5.11 Losung der Warmeleitungsgleichung mit der Linienmethode (**) . . . . . . . . . . . . . . . . . . . . . . 5.5.12 Berechnung der Nullstellen fur die orthogonalen Polynorrie nach G1. 5.106 (***, nicht SE) . . . . . . . . . . 5.5.13 Berechnung der Matrizen A, B, Q und W fur die orthogonale Kollokation (*) . . . . . . . . . . . . . . . . . . 5.5.14 Oxidation von 0-Xylol nach dem zweidimensionalen Modell cines FBR (Orthogonalc Kollokation) (***) . . . . 5.5.15 Oxidation von 0-Xylol nach den1 zweidimcnsionalen Modell cines FBR mit Hilfe von FEMLAB (nicht SE) . .
191 191 199 199 201 208 213 214 214 215 219 224 226 226 227 231 233 234 239 242 245 249 253 258 261 262 263 266
Znhaltsverzeichnis
6
Festbettreaktor . zweiphasige Modelle . . . . . . . . . . . . . . . 6.1 Transportlimitierungen zwischen den Phasen . . . . . . . . . . . . 6.2 Transportlimitierungen in der Feststoffphase . . . . . . . . . . . . 6.3 Probleme und Losungen . . . . . . . . . . . . . . . . . . . . . . . . 6.3.1 Konzentrationsprofile zwischen Gas und Katalysatorkorn nach der Filmtheorie bei einer Reaktion vom Typ A B + C mit Hilfe der SM-Gleichungen (*) . . . . . . 6.3.2 Konzentrationsdifferenzen zwischen Gas und Katalysatorkorn nach der Filmtheorie bei einer Reaktion vom Typ A B + C mit Hilfe der SM-Gleichungen (*) . . . . . . 6.3.3 Isothermer eindimensionaler FBR mit externem Stofftransportwiderstand (DAG1-System) (**. nicht SE) . 6.3.4 Konzentrationsprofil und Nutzungsgrad fur eine heterogen-katalytische Reaktion A + B erster Ordnung in A (**] SE bedingt) . . . . . . . . . . . . . . . . 6.3.5 Reaktion erster Ordnung A B im isothermen FBR mit Porendiffusion (**) . . . . . . . . . . . . . . . . . . . . . 6.3.6 Reaktion erster Ordnung A + B im porosen Katalysatorkorn nach dem Staub-Gas-Model1 (**) . . . . 6.3.7 Reaktion A i=! B C mit LH-Kinetik im porosen Katalysatorkorn nach dem Staub-Gas-Model1 (***) . . . . 6.3.8 Nichtisothermer Festbettreaktor mit Stofftransportwiderstanden im Katalysatorkorn (***) . . . . . . . . . . .
-
XI
269 269 273 279
279
281 284
289
---$
+
7
292 293 296 300
Planen und Auswerten reaktionskinetischer Experimente . . 305 7.1 Parameterschatzung . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 7.1.1 Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 7.1.2 Parameterschatzung in Differentialgleichungen . . . . . . . 308 7.1.2.1 Sensitivitatsgleichungen . . . . . . . . . . . . . . . 308 7.1.2.2 Das ,,inverse" Problem . . . . . . . . . . . . . . . . 309 7.1.3 Differenzieren und Integrieren von MeDwerten . . . . . . . 310 7.2 Versuchsplanung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 7.2.1 Parameterprazisierung . . . . . . . . . . . . . . . . . . . . . 313 7.2.2 Modellaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 7.2.3 Modelldiskriminierung . . . . . . . . . . . . . . . . . . . . . 316 7.3 Probleme und Losungen . . . . . . . . . . . . . . . . . . . . . . . . 317 7.3.1 Kinetische Untersuchungen im isothermen Batch-Reaktor (*) . . . . . . . . . . . . . . . . . . . . . . . . 317 7.3.2 Reaktionskinetische Auswertung einer q,. Kurve im Reaktionskalorimeter (*) . . . . . . . . . . . . . . . . . . . . 321 7.3.3 Einzelreaktion erster Ordnung; Haufigkeitsfaktor und Aktivierungsenergie nach der Methode der kleinsten Quadrate (*) . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 7.3.4 Bewertung der Anpassung in Problem 7.3.3: Antwortflache. Kovarianzmatrix und gemeinsamer Konfidenzbereich der Parameter (**) . . . . . . . . . . . . 325
XI1
Znhaltsverzeichnis
7.3.5 Eigenwert-Eigenvektor-Zerlegungder Matrix N und Korrelationsmatrix der Parameter aus Problem 7.3.4 (*) . 7.3.6 Parameterschatzung in DGls (*) . . . . . . . . . . . . . . . 7.3.7 Parameterschatzung in DGls mit der Mehrzielmethode (***. nicht SE) . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.8 Differentielle Auswertung von Konzentrations-ZeitKurven mit Polynomen und Splines (*. SE nur mit Polynomen) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.9 Differentielle Auswertung von Konzentrations-ZeitKurven mit ausgleichenden Splines (*. nicht SE) . . . . . 7.3.10 Differentielle Auswertung von Konzentrations-ZeitKurven mit rationalen Funktionen (*) . . . . . . . . . . . . 7.3.11 Parameterschatzung in einer einfachen DG1 mit der Himmelblau-Jones-Bischoff-Methode (*) . . . . . . . . . . 7.3.12 Parameterschatzung in der Bulirsch-DG1 mit der Himmelblau-Jones-Bischoff-Methode (*) . . . . . . . . . . 7.3.13 Prazisierung der Geschwindigkeitskonstanten in einer Langmuir-Hinshelwood-Gleichung(**. nicht SE) . . . . . 7.3.14 Modellauhau (**) . . . . . . . . . . . . . . . . . . . . . . . . 7.3.15 Diskriminierung zwischen zwei Geschwindigkeitsgleichungen (**) . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.16 Differentielle Auswertung von axialen Konzentrationsund Temperaturmessungen in einem NHs-Versuchsreaktor (***. nicht SE) . . . . . . . . . . . . . . . . . . . . .
329 329 333
342 347 350 353 354 356 359 365
369
A Einige weitere Moglichkeiten von MATLAB . . . . . . . . . . . A . l Menu-Fuhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 GUIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3 Neuronale Netze - ein Beispiel fur Toolboxen . . . . . . . . . . . . A.4 CFD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
383 383 384 385 389
Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
395
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
398
Vorwort Als Hochschullehrer fiir Technische Chemie horte ich von MATLAB zum ersten Ma1 von einem Kollegen aus der Regelungstechnik. Ich halte das auch heutc noch fur bezeichnend: Obwohl MATLAB - wie das vorliegende Buch a n Beispiclcn aus der Chemischen Reaktionstechnik zeigen wird - ein universelles Werkzeug der numerischen Mathematik ist, hat es sich auf bestimmten Gebieten schnell durchgesetzt, wtihrend es auf anderen hochstens eine Randrolle spielt. Fur regelungstechnische Aufgaben z. B. gibt es eine ganze Reihe von Toolboxcn, dagegen la5t sich fiir das Chemie-Ingenieur-Wesen hochstens ein entfernter Verwandtcr anfiihren, die Chemometncs Toolbox. Nach kurzer Einarbeitungszeit setzte ich MATLAB in reaktionstechnischen Vorlesungcn und Ubungen ein, mit dem erhofften Erfolg: Meine fortgeschrittencn Studenten, vom Chemiestudium nicht gerade optimal auf wissenschaftliches Rechncn vorbereitet, scheiterten bis dahin regelmaig bei dem Versuch, miihSam erarbeitete Losungsmethoden in Programme einer hoheren Programmiersprache umzusetzen, und ich hatte weder Zeit noch Lust, die Fehler in solchen Programmtorsos zu suchen. MATLAB zu lernen und einzusetzen erwies sich als sehr vicl einfacher, so dai3 wir uns mehr auf die vorgelagerten Schritte konzentricren konnten, also auf die mathematische Modellierung reaktionstechnischcr Systcme, das Erkennen der mathematischen Struktur und die Auswahl geeigneter Losungsalgorithmen. Mit fortschreitender Ubung lie5en sich meine Studenten auch auf ein fiir sie vollig neues Gelande fiihren, auf die Programmierung in Blockschaltbildern, mit anderen Worten auf den Einsatz von SIMULINK, das wesentlich schnellere Simulationsrechnungen zulii5t. So wurden MATLAB und SIMULINK zu unserem Standardwerkzeug fur wissenschaftliches Rechnen; es wurde in Forschungsarbeiten und in Kooperationcn mit Industriepartnern auf komplexe Probleme angesetzt und iiberzeugte. Das vorliegende Buch mochte diese Erfahrungen weitergeben. Es ist kein hcrkommliches einfuhrendes Lehrbuch der Chemischen Reaktionstechnik (CRT), cs vcrmittclt CRT anhand realistischer Problemc, zu deren Losung man cincn Computer benotigt. Im Vordergrund steht die Anwendung moderner numerischer Methoden, nicht die Vollsttindigkeit der fachlichen Inhalte; zu Beginn der einzelnen Kapitel werden die Grundlagen der CRT aber im Zusammenhang crweitert und vertieft. Im Gegensatz zu herkommlichen Aufgabensammlungen, die sich iiberwiegend auf analytisch losbare, einfache Ubungen beschran-
XIV
Vorwort
ken, konzentriert es sich auf die Computeranwendung; das geschieht mit Hilfc von MATLAB, einer weitverbreiteten, vielseitigen und machtigen Softwarc, die nicht nur bei einfachen Ubungsaufgaben cinsetzbar ist, sondern hohercn Anforderungen geniigt und den ubergang zu den Problemen der Praxis mitmachen kann. Eine Einfuhrung in MATLAB wird nur soweit gegeben, wic man zum Einstieg benotigt, fiir alles weitere sind die Handbucher und insbesondere auch die Online-Hilfe bestens geeignet; weitere Informationcn zu MATLAB gibt dcr vorletzte Abschnitt dieses Vorworts. Das Buch ist also in erster Linie gedacht als eine Anleitung zum wissenschaftlichen Rechnen anhand typischer Probleme der CRT, die auf dem Computcr bcarbeitet werden konnen. Der Weg vom Problem zur Losung vcrlauft uber die Hauptstationen Modellierung, Simulation und Interpretation, die in vielfaltigcr Weise miteinandcr verwoben sind und nicht isolicrt betrachtet werden solltcn. In diesem Buch liegt das Hauptgewicht auf dem Simulationstcil, dcm wisscnschaftlichen Rechnen. Es werden (Muster-)Losungen vorgestellt und gezeigt, wie MATLAB und SIMULINK als vielseitige Hilfsmittel dienen konnen, insbesondere auch in Verbindung mit einer symbolischen Programmiersprachc wie MAPLE, das als Toolbox in MATLAB eingebunden werden kann, und unter geschicktem Einsatz der Zeichenkettenverarbeitung. Die Probleme sind moglichst realistisch gestaltet, es gibt einfache Probleme zur Ubung oder zum Einsticg, solche mittleren Schwierigkeitsgrades und anspruchsvollere, aus dcncn - so stcht zu hoffen - auch der erfahrene Reaktionstechniker Nutzen zichen kann. Die Beispiele dieses Buches sind iiber viele Jahrc entstanden; sie stammcn aus der akademischen Lehre, aus Kursen fur die industrielle Praxis, aus Forschungsarbeitcn und aus Kooperationen mit Partnern aus der Industric.
Zur Organisation des Buches Die Gliederung und den roten Faden bcstimmt die CRT. Es warc auch denkbar gcwesen, die Moglichkeiten von MATLAB vorzustellen und anhand von rcaktionstechnischen Beispielen zu demonstrieren - das aber wiirdc dem Weg vom Problem zur Losung zuwiderlaufen. In den einzelnen Kapiteln werden stets die reaktionstechnischen Grundlagcn crlautert, auf denen eine Losung der Probleme aufbauen kann; die gedrangte Darstellung der Grundlagen ist zur Wiederholung und zur Vertiefung gedacht, erweitert aber die in den herkommlichen Lehrbiichern behandelten Gebietc. Ich hoffe, dai3 an manchen Stellen die Ausfiihrungen zur Klarung von Begriffen odcr Sachverhalten beitragen konnen, die in einschlagigen Werken unvollstandig odcr gar irrefiihrend behandelt werden. Von den klassischen Gebicten der CRT fehlcn die Mehrphasenrcaktoren aus folgendem Grund: Das Zusammenspiel von chemischer Reaktion und physikalischen Transportprozesscn wird, was seine Anfordcrungen an wissenschaftlichcs Rechnen betrifft, ausreichend im Kapitcl iiber zweiphasige Modellc von Fcstbettreaktoren behandelt. Dariiber hinausgehende, spezifische Anforderungcn von Mehrphasensystemen an Rechentechniken gibt es durchaus, wie etwa die Losung von Intcgro-Differentialgleichungen,die bci Populationsmodellen auf-
Vorwort
XV
trcten, abcr auf diesem Feld hat MATLAB so wenig zu bieten wie andere Programmpakete. Anderen Gebieten, wie z. B. dem Verweilzeitverhalten von Reaktoren, sind auch keine eigenen Kapitel gewidmet; sie werden aber in Form von Problemen an geeigneter Stelle gestreift. Dic Problemc selbst sind in eigenen Abschnitten zusammengefaBt, den Kapitclthcmcn wie Stochiometrie, Thermodynamik, Kinetik, Reaktoren usw. zugcordnct, aber zwangslaufig haufig iibergreifend. Die meisten Kapitel enthalten cin besondcrs umfangreiches Problem oder Beispiel, das in den Uberschriften zusammcn mit seinen Hauptinhalten reaktionstechnischer oder rechnerischcr Art ausgewicsen ist. Der erfahrene Reaktionstechniker kann sich unmittelbar mit solchen Problemen beschaftigen, um die Moglichkeiten von MATLAB und SIMULINK kennenzulernen. Far weniger Erfahrene sind die meisten groBen P r e blemc in cine Reihe von Teilproblemen aufgespaltet, an denen sie sich zunachst versuchen konnen. Zur Orientierung ist der Schwierigkeitsgrad angegeben: * steht fur leicht, ** far mittelschwer und *** fur schwierig; die Einschatzungen sind relativ und subjektiv; je nach Vorkenntnissen kann dcr Leser' anders urteilen. Es wcrden einige numerische Verfahren angewendet, die nicht unmittelbar zum Umfang von MATLAB und seinen Toolboxen gehoren, aber mit ihrer Hilfe bcsondcrs kompakt und einfach cingesetzt werden konnen, wic z. B. die orthogonalc Kollokation oder die finite Volumenmethode zur Losung von particllen Differcntialgleichungen. Damit der Leser auf sie zuriickgreifen kann, sind diese Methodcn in eigenen Abschnitten kochbuchartig zusammengestellt. Fur die Beispiclc und die Losungen dcr Probleme wurden MATLAB-Programme crstellt liberwiegend in Form von M-Files oder SIMULINK-Modellen (MDL-Filcs), die auf der Begleit-CD zu finden sind; ihre Namen sind im laufendcn Tcxt in KAPITALCHEN gesetzt. Hier werden (Muster-)Losungen vorgestclk, dic keincswegs uniibertrefflich sind. Meistens sind es Ad-hoc-Losungen, so wie man sic zum Bearbeiten eigener Probleme entwickclt, nicht in crster Linic fiir andcrc Benutzer gedacht, insbesondere auch nicht defensiv, d. h. nicht fehlerabwciscnd ausgebaut. Aber: Verstandlich sollten sie in jedem Fall sein. Um dic bedeutende Rolle des Experiments in der Reaktionstechnik wenigstcns anklingen zu lassen in einem Buch, das der mathematischen Modellierung und dem wissenschaftlichen Rechnen gewidmet ist, werden gelegentlich Experimentc anhand von SIMULINK-Modellen simuliert, z. B. mit einem Reaktionskalorimeter im Abschnitt 4.2.2 oder mit einem Festbettreaktor in Abschnitt 3.1.3, an anderen Stellen werden schlichte Exe-Files verwendet. In den cinzelncn Kapiteln werden die komfortablen Moglichkeiten von MATLAB und SIMULINK zur Ein- und Ausgabe von Datcn sowie zur Visualisierung Liehc Lcserin, ich bcnutzc hier und in1 folgcnden den Oherhegriff ,,Leser". Der m$nnlichc Lcscr niag sich beschweren, daO far ihn kcine eigcnc Bczeichnung gcbr8uchlich ist, die Leserin, daU sie in1 Oberbegriff eingeschlossen ist und ihrc cigcne Bezeichnung nicht genannt wird. Wer hier ein Dilenirna sieht, kann niich trotzdern nicht zu Vcrrcnkungen veranlasscn, etwa dcn Text durch ,,der Leser oder die Leserin" (in welcher R.eihenfolge?) aufzubl8hcn oder gar mcine Mutter/Vater-Sprache durch ungeheuerliche Schr8gstrichkonstruktionen (Marke: Der/die Lcscr(in)) zu verhunzen; auch rnein privater Ausweg - ,,das LeserIn-Mensch" -- ist, hier sicherlich nicht angehracht. Kurz und gut: Leser bciderlei Gcschlechts sind rnir willkomrnen.
XVI
Vorwort
viclfaltig aufgezeigt. Darilber hinaus bietet MATLAB eine Reihc wciterer Hilfsmittel. Dazu gehort vor allem das Notebook, die Vcrbindung von WinWord und MATLAB: So kann man Dokumentation und Rechnen bequem vcrknupfen. Mit MATLAB kann man vollstiindige GUIs erzeugen, wie eindrucksvoll MATLABs Demos zeigen. Das mag ilber eine gewisse Spielerei hinaus vorteilhaft scin, z. B. wenn man denselben Rechenablauf haufig bcnotigt, oder wenn man Mitarbeiter, die nicht mit MATLAB vertraut sind, fur Routinerechnungcn cinsetzcn mochte. Auf solche peripheren Moglichkeiten weist bcispielhaft cin Kapitel im Anhang hin. Es ist in diesem Vorwort vielleicht schon deutlich geworden, dai3 dieses Buch auch und vor allem als professionelles Nachschlagcwerk far typische Aufgabcn der reaktionstechnischen Modellierung gedacht ist. Um schnelles und sichcrcs Finden von Losungen oder Losungsmoglichkeiten bei Bedarf moglichst einfach zu machen, sind im Inhaltsverzeichnis samtliche Aufgaben (Problcme) vermcrkt; auch beim Stichwortverzeichnis (Index) wurde darauf geachtet, wichtige Begriffe und Methodcn herauszustellen. Dieses Buch ist in mehr als dreijghriger Arbeit entstandcn. In dieser Zeit gab es eine Reihe von updates fur MATLAB und seine Toolboxen; ein besonders groi3er Schritt war der Wechsel von der Version 4.x auf 5.x. Wo es sinnvoll erschien, wurden Programme auf den neuesten Stand gebracht. Nicht allc neuen Moglichkeiten wurden im Nachhinein cingcbaut: Zum Beispiel wird auffallen, dai3 die Art der Bcschriftung von Abbildungen nicht einheitlich ist. Das liegt zum Teil daran, da0 die Verwendung von Sonderzcichen odcr von TEX-Elementen erst in sptiteren Versionen moglich war - dic Vcrstandlichkcit dcr Abbildungen ist davon nicht beruhrt. Gelegentlich wurdcn auch altcrc Losungswege bcibehalten, weil sie zeigen sollen, wic man sich in MATLAB gcschickt helfen kann, wenn die vorhandenen Werkzeuge einmal nicht ausrcichcn odcr nicht optimal erscheinen. D a m gchort etwa das programmierte Ausblcnden von Vektorkomponenten mit Demuz-Blocken in SIMULINK, vor allem bci dcm Modcll cines Reaktionskalorimeters im Abschnitt 4.2.2, das man in dcr SIMULINK-Version 2 zum Teil einfacher mit Select-Blocken crrcichen konntc, abcr eben nur zum Teil: Das Ausblenden cinzelner Vektorelementc ist einfachcr, aber nicht das Ausblenden von Teil-Vcktoren; erst mit der Version 5.3 kam cin Bus-Selector-Block als entsprechendes Hilfsmittel. So blieb die alte Losung an manchen Stellcn erhalten, weil sie cinfacher oder zumindest gleichwertig war, oder sie dient zur Demonstration.
Zum Gebrauch des Buches Dic Organisation eines Buches wird naturlich nachhaltig davon bccinflu5t, wie sich cin Autor den Gcbrauch seines Buches vorstellt. Deshalb cnthalt dcr vorigc Abschnitt schon eine Reihe von Hinweisen in diese Richtung, dic nun im Zusammcnhang noch einmal aufgegriffen und crwcitert werdcn sollcn. Grundkenntnisse in MATLAB und in numcrischcn Methoden vermittelt dicses Buch nicht systematisch. Der Leser sollte sie mitbringen oder sich (parallel) aneignen, z. B. anhand von Kapitel 3, und dann im weitcren Vcrlauf verticfcn.
Vorwort
XVII
Auch reaktionstechnische Vorkenntnisse sind gefragt; sie konnen anhand der auf die Probleme ausgerichteten Darstellung in den einzelnen Kapiteln wiederholt und vertieft werden. Die meisten Probleme kann man allein mit Hilfe der Studentenausgaben von MATLAB und SIMULINK bearbeiten, fur andere benotigt man die professionellen Ausgaben, und fur einige zustitzlich auch die eine oder andere Toolbox. Obwohl die Datenbeschaffung ein ganz wichtiger Bestandteil der Modellierung und Simulation ist, werden die meisten der benotigten Daten angegeben. Selbst wer noch keinen Zugang zu MATLAB hat, kann das Buch mit Nutzen studieren: Die Aufbereitung der Probleme und Losungswege bis zur Simulation ist in vielen Fallen weitgehend unabhangig von der Programmierung; man konnte auch in einer der Hochsprachen programmieren oder andere Simulationswerkzeuge benutzen - der eigene Arbeitsaufwand wurde allerdings betrachtlich steigen. Dem Leser kann nicht dringend genug empfohlen werden, zunachst eine eigene Losung zu versuchen. Erst wenn eine eigene Losung erarbeitet ist, oder wenn man trotz aller Anstrengung festsitzt, sollte man sich den Musterlosungen zuwenden. Die drei Hauptschritte werden besprochen: Modellierung, Simulation, Interpretation und gegebenenfalls ihre Interdependenzen. Bei den einfachen Beispielen, die auf Ungetibte zugeschnitten sind, wird ausfuhrlicher auf den Losungsweg eingegangen, insbesondere in den ersten Kapiteln; bei den komplizierteren Aufgaben wird oft nur die Losungsstruktur skizziert. Zur Diskussion der Simulationsschritte dienen kommentierte Programmausdrucke. (Die Programme auf der Begleit-CD sind aus mehreren Griinden unkommentiert; einige liegcn nur in kompilierter Form vor.) Dem fortgeschrittenen Leser wird gclcgentlich zugemutet, Variablennamen im Programm entsprechenden Formelzeichen zuzuordnen oder ganze Programmteile ohne weiter Erlauterungcn zu verstehen, besonders dann, wenn auf tihnliche Aufgaben verwiesen werdcn kann.
Die Losungsvorschltige kann man zwar zur Not auch ohne Computer studieren, aber so bei weitem nicht ausschopfen. Sie sind zweckmafiig vor einem cingeschalteten Computer zu lesen, auf dem die CD-Programme gestartet und die Ergebnisse der Simulationen - tiber die schwarz-weii3 Grafiken im Buch hinaus - wtihrend oder nach dem Simulationslauf visualisiert werden konnen. Dabei sol1 man naturlich die Moglichkeit ausgiebig nutzen, Parameter zu andern und die Auswirkungen zu studieren. Besondere Bedeutung kommt der Interpretation der Ergebnisse zu. Vor allem: Scheincn sie frei von numerischen Artefakten und sind sie physikalisch sinnvoll? Was ein Computer ausgibt, mui3 gepruft werden. Das kann auf verschiedcncn Wegen geschehen: Ein wichtiger und vom reinem Anwendcr numerischer Methodcn noch am leichtesten zu begehender Weg ist die Vercinfachung seiner Glcichungen auf analytisch losbare, fiir die dann die symbolische Toolbox mit Vorteil eingesetzt werden kann. Auch dafiir enthalt dieses Buch Beispiele.
XVIII
Vorwort
Informationen uber MATLAB und SIMULINK Wcr MATLAB noch nicht kennt und auch keinen Zugang hat (z. B. ubcr ein Rechenzentrum!, kann sich im Internet untcr http://www.mathworks. com umfassend informicren. Von den demos konnte man sich zunachst Basic Matrix Operations in M A T L A B ansehen: Man erreicht sie am besten unter dem quick link ' M A T L A B in Education'. Die anderen demos sind wie die SIMULINKDemos zwar interessant und beeindruckend, der Anfgnger wird aber Muhc haben, sie im einzelnen zu verstehen. Untcr M A T L A B in Education findet man auch den Punkt Select resources for your particular area of interest, and GO: Wahlt man hier Chemical Engineering, so crreicht man Teaching examples, von dcnen ich Numerical Methods. CENG303: M A T L A B for Chemical Engineers, Rice University empfehlen mochte; es ist ein Kurs, der in kleinen Schrittcn in MATLAB einfuhrt und am Bildschirm verfolgt werden kann. Einfachcr ist es, sich die Studentenausgaben von MATLAB und SIMULINK zu besorgen (je 120,- bis 130,- DM). Preiswerter wird man wohl kaum an cin so vielseitiges Instrumentarium fur das wissenschaftliche Rechnen gelangen; es hat einige Einschrankungen gegenuber den Vollversionen, die aber fur das Lcrnen unerheblich sind; dafur enthalt es ( MATLAB) zusatzlich das Notebook sowie drei Toolboxen , darunter die so wichtige Symbolic Math Toolbox, eine Auswahl aus MAPLE. Mit diesen Studentenausgaben kann man fast alle Aufgaben diescs Buches bearbeiten.
Begleitprogramme Die Begleit-CD enthalt zwei Verzeichnissc: In ,,crcums'' sind dic Programme fur die Vollversionen von MATLAB und SIMULINK, in ,,creums-se '' dic Programme fur die Studentenausgaben. Vorsicht ! Trotz gleichen Namens untcrscheiden sich viele Programme aus dicsen beiden Verzeichnissen (MATLAB-Programme und SIMULINK-Modclle) - sie sind also nicht austauschbar. Am besten kopiert man das zutreffende Verzeichnis in ein neues Unterverzeichnis von MATLAB; wie man dieses Unterverzeichnis zum aktuellen macht odcr wie man cincn Pfad legt, steht im Handbuch.
Not ation 0.1
Schriftauszeichnung
Mit wcnigen, angemerkten Ausnamen bezeichnen kleine fette Buchstaben Vektoren (x),grof3e fettc Buchstaben Matrizen (M);Buchstabenkombinationen als Matrix- oder Vektorname sind zusgtzlich unterstrichen (ESM). Fremdsprachige Ausdrilcke sind mit wenigen Ausnahmen (MATLAB) kursiv gesetzt (backslash), ebenso Programmnamen und sonstige Bezeichnungen in MATLAB und SIMULINK (5’-function); Fachausdrilcke (online) werden normal geschrieben, sofern sie im Duden aufgefilhrt sind. Variable sind im laufenden Text kursiv gesetzt ( h ) ,Programmvariable steil (XZU). Platzhaltcr fur chemische Verbindungen (A, B usw.) stehen im Text normal stcil, in mathematischen, stochiometrischen und Rcaktionsgleichungen kursiv. Anwcisungen (Befehle) , auch in Programmausdrucken, sind in serifenloscr Schrift gesetzt (inv(M)), Ausgaben im MATLAB-Fcnster in TypewriterSchriftart (ans = 5.87). Ausnahmen sind einige aus Vorlagen entstandene C MEX-+fileS-functions, die statt in serifenloser Schrift in Typewriter-Schriftart gesetzt sind: Die fettgedruckten eigenen Eintriige heben sich so besser ab. Dic Namen der beigefagten Programme und sonstiger Files sind in Kapitiilchen gesetzt (STOICH). Kommentare in Programmausdrucken werden mit % eingeleitet und, wenn sic uber eine Zeile gehen, auch mit % abgeschlossen.
XX Notation
Symbolverzeichnis
0.2
Im folgenden werden typische Einheiten angegeben; in den Rechnungen konnen durchaus auch andere Mafisysteme verwendet werden.
Einheit
Symbol
a
BO Bi Bo CP C
CP
D Da d E E ESM F
f G H H h J K KO k k0
L 1
m m
N N N N N N
NR NS n
spezifische Austauschflachc Per meabili tat Biot-Zahl Bodenstein-Zahl Molwarme Konzentration spezifische Warmc Diffusions-(Dispersions-) koeffizient Damkohler-Zahl Durchmesser Akt ivierungsenergie Anzahl Elementc Element-Spezies-Mat rix Flache Flache freie Enthalpie Enthalpie Hesscsche Matrix Warmedurchgangskoeffizient Jacobi-Matrix Gleichgewichtskonstante Knudsenkoeffizient Gcschwindigkeitskonst ant e Haufigkeitsfaktor Ltinge Langenkoordinate Masse Massestrom Matrix der stochiometrischen Koeffizienten u,? Ntiherung fiir Hessesche Matrix Molstrom Molstromdichte Anzahl Kollokationspunktc Anzahl Komponenten Reaktionsmatrix stochiometrische Matrix Molzahl
m2/m3 m2
kJ/(kmol K) kmol/m3 k J / k K) m2/s m kJ /kmol
m2 m2 kJ/kmol kJ/kmol kW/(m2 K) versch. Einh. m versch. Einh. versch. Einh. m m kg kg/s
kmol/s kmol/(m2 s)
kmol
Symbolverzeichnis
ni
Pe P 4
R R
R Re r r S
sc SEM Sh St S S
Reak tionsordnung Peclet-Zahl Druck Warmestrom Gaskonstante individuelle Reaktionsgeschwindigkeit, Produktions- oder Verbrauchsgeschwindigkeit Anzahl Reaktionen Rey nolds-Zahl Reakt ionsgeschwindigkeit radiale Koordinate Anzahl der unabhangigen stochiometrischen Gleichungen Schmidt-Zahl Spezies-Element-Matrix Sherwod-Zahl Stanton-Zahl Schatzwert filr St andardabweichung Zustandsvariable CVZl,
Temperatur Zeit St romungsgeschwindigkeit Volumen Kovarianz-Matrix Volumenstr om Umsatz Molanteil Ortskoordinate
V V 2,
X X 2
kmo1/(m3 S)
krnol/(m3 s) m
...., C V i R
ST
T t U
Pa kW kJ/(krnol K)
K S
4 s rn3 m3/s
m
Griechische Buchstaben cr
P 6 E
rl
8 A
x
v
E
Warmeiibergangskoeffizient Stoffiibergangskoeffizient Grenzschichtdicke relativer Volumenanteil; Porositat dynamische ZBhigkeit Parameter rnittlere freie Weglange Warmeleitfahigkeitskoeffizient stochiometrischer Koeffizient Reaktionslaufzahl, (Reaktionsvar iable)
kW/(m2 K) rn3/(m2 s) m
kmol/s
xx
XXII Notation P U 7 T
Q,
4
Dichte Standardabweichung Raumzeit, Verweilzeit Labyrinthfaktor Zielfunktion
kg/m3 S
versch. Einh.
Thiele-Modul; allgemeine Variable
Index oben
0 D e e ff S V
*
Eingang; Zulauf; Bezug; Standardwert Diffusion Ausgang; Ablauf effektiv Sollwert; Oberflache (surface) Volurnen (volume) Schgtz-(Regressions-) Wer t
Index unten a ad ax C
e 9
h i j
K Kn A4 m
N P
R T
S S
t U V
W
axial adiabatisch axial Kiihlung Gleichgewicht (equilibrium) Gas (gas) Wtirme (heat) Komponente i Reaktion j; Reaktormantel (jacket) Kreislauf Knudsen Mantel; Molmasse Masse (mass) Anzahl Komponenten Partikel (particle) Reaktion; Reaktionsvolumen; Anzahl Reaktionen Reaktion; Reaktor; radial Anzahl Schliisselkomponenten stationgr Rohr (tube) Umgebung Volumen (volume) Wand (wall)
A bkiirzungsverzeichnis
0.3
Abkurzungsverzeichnis
BR CFD CRE CRT CSTR DAE DAGl DG1 ESM FBR HJB LSM MSR MWR NAG NDIR OK PDGl RB RTW Rv SBR SE SGM SM TDMA UP
B atch-Reaktor Computational Fluid Dynamics Chemical Reaction Engineering Chemische Reaktionstechnik Continuous Starred Tank Reactor Diflerential-Algebraic Equation Differential-Algebraische Gleichung Differentialgleichung Element-Spezies-Matrix Fcst bet treaktor Himmclblau, Joncs, Bischoff Least-squares-Methode .Messen Stcuern Regcln Method of Weighted Residues Numerical Algorithm Group Non-Dispersive Infra-Red Orthogonalc Kollokation Partielle Differentialgleichung Randbedingung Real Time Workshop Reakt ionsvolumen Semibatch-Reaktor Student Edition Staub-Gas-Modcll Stefan-Maxwell Tridiagonal- mat^ Algorithm Untcrprogramm
m I I
Aus technischen Gründen bleibt diese Seite leer
Kapitel 1
Einleitung Mui3 ein Reaktionstechniker die numerische Mathematik beherrschen? Die Chemische Reaktionstechnik (CRT) wendet die Erhaltungsshtze fur Stoff, Encrgic und Impuls auf chemisch reagierende Systemc an, speziell auf Prozessc dcr chcmischen Industrie oder verwandter Industrien. Die mathematische Modellicrung solcher Prozesse fiihrt in der Regel zu stark nichtlinearen Differentialund algebraischen Gleichungen, vor allem, weil die Geschwindigkeit chcmischcr Rcaktionen nach dem Arrhenius-Gesetz exponenticll von der Temperatur abhangt. Gegenuber anderen naturwissenschaftlich-technischenDisziplinen kann man cs geradezu als Besonderheit der CRT herausstellen, dai3 ihre Modellgleichungcn in der Regel diese so stark nichtlineare Abhangigkeit von einer Zustandsgrooe enthalten. Entsprechend ist man in der CRT bei dcr Losung dcr Modcllglcichungen, bei der Simulation, im besondercn MaBe auf effizicntc numcrischc Mcthoden angcwiesen. Um dic cinleitendc Fragc aufzugreifen: Mui3 dcswegcn der Reaktionstcchnikcr auch cin numerischer Mathematiker sein? Ich mcinc: nein; seine Aufgabcn sind die Modcllicrung und die Interpretation dcr Simulationsergebnisse; numerischc Methoden gehoren zu scinem Handwerkszcug. Ohne gutcs Handwerkszeug kann man allerdings nicht adtiquat arbeiten, und man mui3 lernen, mit ihm umzugchen. Fiir einfache Probleme, fur Ubungsaufgaben in der Ausbildung odcr zum Einstieg in bestimmtc Teilgebiete, geniigcn haufig einfache Werkzeugc: Softwarcpakete wie ISIM, MATHCAD oder POLYMATH gehoren dazu, um nur cinigc zu nennen. Fur groae, komplexe Aufgaben in der Praxis mit ihrcn Tauscndcn oder gar Zehntausenden von Modellgleichungen, die meist weit ubcr dcn Bercich der CRT hinausreichen, stehen leistungsfahige Pakete zur Vcrfugung, z. B. SPEEDUP oder DIVA. Solche Softwarc bedarf allerdings langcr Einarbeitungszeit und andauernden Umgangs. Fur die professionellc taglichc Arbeit dcs Reaktionstechnikers ist etwas anderes vonnoten: ein Instrumentarium, das zugleich machtig, vielseitig, flexibel und offcn ist, nicht so starr wie dic groi3cn Softwarepakete, das mehr Raum lafit fur ungewohnliche, krcativc Losungsansatze, und trotzdcm einfach zu erlerncn und zu bedienen ist, benutzcrfrcundlich, wic man zu sagen pflegt. Ein solches Werkzeug ist MATLAB mit
2
1 Einleitung
seincn Toolboxen und Erweiterungen, von dencn SIMULINK cinc bcsondcrc Rollc spielt. Das exemplarisch aufzuzeigen ist Anliegen dicscs Buchcs. MATLAB hilft uns, unserc .Modellglcichungen zu losen und numerischc Ergcbnissc zu bckommen, was wir dem allgemeinen Sprachgcbrauch folgcnd kurz als Simulation bezeichnen. Vor der Simulation stcht die Modellierung unscres Problems, also die Uberfuhrung in mathematische Gleichungen; nach dcr Simulation solltcn wir die Ergebnisse interpretieren. Uber diese drci Schritte Modellierung, Simulation und Interpretation - konntc man ganze Bucher schrciben, und sie sind geschrieben worden. Alleine schon die Gcwichtung dieser drci Schritte wurdc uns in tiefe Wasscr fuhrcn; es stcht aber auiler Fragc: Bei dcr Simulation kann nichts besscres hcrauskommen, als man in dic Modcllicrung hineingesteckt hat. Dic Simulation ist unscr Hauptthcma, abcr wir konncn, diirfen und wollcn dic bciden anderen Schritte nicht auacr acht lasscn. Wcnn wir mit unscrer Programmsammlung, hicr also mit MATLAB, cinigermailcn vertraut sind, werden wir in vielen Fallen gceignetc Losungsvcrfahrcn findcn - vorausgesetzt, wir habcn die mathematischc Struktur unscrcs Modclls richtig erkannt. Meistcns gibt cs mehrcrc Losungswcgc, und sic werdcn nicht allc glcich bcqucm zu bcgehcn sein. Gclcgcntlich fchlcn bckanntc Losungsmcthodcn in unscrer Programmsammlung, und wir musscn vcrsuchcn, mit dcn vorhandenen zu improvisieren. Mit andcren Wortcn: Dic Auswahl cines LOsungsvcrfahrcns crfordcrt haufig einigc Ubcrlegung. Bctrachten wir ein Beispiel zu diesen Vorbemcrkungen, das in dcr rechncrischcn Ausfuhrung schon sehr wcit fuhrt: Stcllen Sic sich vor, wir habcn cin dctaillicrtcs Model1 fur cinc Dcstilla.tionskolonnc (mit oder ohne chemische Reaktion); dic Bilanzglcichungcn sind v011 dcr allgcmeincn Form:
Dabei sind s die Zustandsvariablcn, z. B. Molantcilc und Tcmpcratur, x vorgcgcbcne Groacn und u z. B. Molstrome von Dampf und Flussigkeit, die sich so cinstellen miissen, dail die algebraischcn Bezichungen crfullt, z. 3.Phascngleichgewichte cingestellt sind. Im Abschnitt 4.4.16 konncn Sie solchc Bilanzcn dctailliert schcn. Wie lost man ein solches DAG1-System? Eine naheliegcndc Moglichkeit: Man itericrt mit Hilfc eines Optimicrprogramms die u(t)-Variablcn iibcr hinrcichend klein gewghlte t-Abschnitte, bis dic algebraischen Glcichungcn jcweils crfullt sind, entweder von Boden zu Bodcn, oder ubcr die gcsamtc Kolonnc. Beidcs fiihrt zu unertraglich langen Rechcnzeiten. Ein DAG1-Loser warc schr vortcilhaft, und wir werdcn spatcr schcn, wic wir cxtcrnc Programme in SIMULINK implemcntieren konncn, abcr: Man muate zuvor den Indcx bcstimmcn - zumindest bei dcn meistcn bis hcute verfugbaren Programmcn - , und cs wird sich hcrausstcllcn, daa dcr Indcx grofier als eins ist und damit cine Routineanwendung dcs DAG1-Losers nicht in Frage kommt. NATLAB (nicht SIMULINK!) cnthalt erst seit dcr Version 5.3 eingcschranktc Moglichkciten zur
3 Losung von DAGls vom Index 1. Fiir MATLAB oder SIMULINK l a t sich die Indexbestimmung aber in ein Losungsverfahren iiberfiihrcn, das nur mit DGls zu tun hat und daher sehr schnell arbeitet. Wir betrachten das an einem sehr weit abgespeckten formalen Analogon, das eine analytische Losung hat: ds dt g
-
-
U
= s*(t+l)-1=0
Die analytische Losung liegt auf der Hand: s=-
1 t+l’
= --
(t
1
+ 1)2
Wie konnen wir vorgehen? Die Differentiation von g liefert uns: ds dg _ - ( t + 1)- + s dt
Wir setzen den Ausdruck fiir
dt
=0
% ein und differenzieren erneut:
g2 = (t
+ 1). + s = 0
du _ dg2 - (t + 1)- + u + dt dt
ds dt
-=0
Damit erhaltcn wir eine DG1 fur u. Die konsistenten Anfangsbedingungen fur das DG1-System sind:
t = 0 : s = 1 , u = -1
(1.9)
Die Anfangsbedingung fiir u folgt aus g2. Der Leser moge sich anhand dieses einfachen Beispiels iiberzeugen, wie erheblich die Unterschiede in den Rechenzeiten fur das erste Verfahrcn, die Iteration, und fiir die Losung des DG1-Systems (1.3), (1.8) und (1.9) sind; dann wird er die Miihe des zweimaligen Differenzierens gering achten, zumal ihm bei komplizierteren Gleichungen die Symbolic Math Toolbox hilfreich zur Seite stcht, und die Indexpriifung fiir einen DAG1-Loser es ebenfalls erfordern wiirde. (Das DG1-System ist im SIMULINK-Model1 DAGL-DGL.MDL implementiert.) Eine iterative Losung auf dem skizzierten Weg ist nicht nur zeitraubend, was die Rechengeschwindigkeit betrifft, sondern erfordert auch umfangreichc Tests hinsichtlich der Zeitdiskretisierung sowie der Einstellungen der zahlreichcn Optionen sowohl beim Optimierverfahren als auch beim DG1-Loser. Versuchen Sie
4
1 Einleitung
es selbst , bevor sie auf den Losungsvorschlag zuruckgrcifcn! (Dcr Losungsvorschlag ist in dem Programm DAGL-STEU mit den UPS DAGL-OPT und DAGL cnthalten.) Es sei noch angemerkt: Die Aufgabe laat sich auch als Variationsproblem behandeln: u ist dann als Steuervektor zu verstehen, der cine geeigncte Zielfunktion optimiert, hier z. B. (g(u,t ) ) 2 minimiert. Bci nichtlinearen S y s t c men durfte aber die Bestimmung der optimalen u-Trajektorie, z. B. durch das Vcrfahren der Steuervektor-Iteration, ebenfalls zu langen Rechenzeiten fuhrcn; ich habe das nicht ausprobiert, aber Sie konnten es versuchen. Anleitung findcn In dicsem Zusammenhang Sic z. B. in einem Buch uber Regelungstechnik ([l]). sei angemerkt: Regelungstechnik und Chemischc Reaktionstechnik lassen sich rccht zwanglos unter dem Dach der Systcrnthcorie ansicdeln, ihrc Mcthodcn weiscn schr vielc Ahnlichkeitcn auf; diesc Verwandtschaft solltc vie1 mchr in Anspruch genommen werden! Wir sehen also, die Auswahl von Losungswcgcn fur die Simulation crfordcrt Erfahrung und Ubung, auch bei einer so benutzerfrcundlichen Programmsammlung wie MATLAB, und dazu sollen die folgendcn Kapitel vcrhelfcn.
Kapitel 2
MATLAB und SIMULINK 2.1
Einfuhrung
Welche Kenntnisse von MATLAB sollte man mitbringen, um diescm und den folgenden Kapiteln ohne allzu groi3e Muhc folgen zu konnen? Das kann auf jeden Fall, wer intro im MATLAB-Fenster eingegeben hat, Getting Started With MATLAB durchgearbeitet, wenigstens so weit, dai3 er wcii3, wo er nachsehen kann, und sich vielleicht noch einige demos angesehen und einige einfache MFiles studiert hat. Es geht aber auch einfacher und schneller: Sie bcginnen mit Kapitel 3 dieses Buches, lernen dort umzugehen mit Vektoren und Matrizen, linearen und nichtlinearen Gleichungssystemen, mit Differcntialgleichungen in MATLAB und in SIMULINK, und kommen in SIMULINK sogar bis zu den S-Funktionen, ein Kapitel fur sich, das in fast allen in MATLAB und SIMULINK einfuhrenden Buchern ausgespart ist; auch in die Zeichenkettenverarbeitung werden Sie dort schon eingcfuhrt, und alles im Zusammenhang mit Problemen der CRT. Dabei lernen Sic cine ganze Rcihe von MATLAB- Anweisungen und von SIMULINK-Blocken kennen, und Sic konnen sich gleich daran gcwohnen, mit der MATLAB-Hilfe umzugehen. Dazu noch einige Hinweise: help help im MATLAB-Fenster gibt Ihnen eine ausreichende Einfuhrung. Jeden Bcfchl konnen Sie mit help 'Befehlsnarne' aufrufen und in allen Einzelheiten studieren, viele auch im MATLAB-Handbuch nachlescn. Schwierig wird es erst, wenn Sic selbst etwas rechnen oder programmieren wollen und sich im Befehlsvorrat noch zu wenig auskennen. Eine gewisse Hilfe bietet lookfor, mit dem man nach (mathematischen) Begriffen wie ,,inverseii suchen kann. (Sic konnen help lookfor im MATLAB-Fenster eingeben, um Naheres zu crfahren!) Am besten sieht man von Zeit zu Zeit die Befehlssammlungen durch ( m a t ~ u b \ g e ~ e r ~ ~ - General purpose commands, matlab\ ops - Operators and special characters usw.); man findet sie im Help-Menti unter help window; Doppelklicken fuhrt bis zu dcn Erlauterungen der einzelnen Befehle. Auch dic nicht so umfangreichc SIMULINK-Blockbibliothek sollte man gelegcntlich durchblattern.
6 2 MATLAB
und SIMULINK
Wenn Sie das Kapitel 3 dieses Buches studiert haben, konnen Sic, wcnn Sic wollen, an diesc Stellc zuruckkehren, um einigc fortgeschrittcne Technikcn kennzulernen, die in spateren Kapiteln haufiger angewendet wcrden; selbstvcrstandlich gibt es einige Dinge, an die man sich erst durch Ubung gcwohncn mui3, vor allem an das moglichst weitgehende Vektorisieren der Anweisungcn und Programme, verbunden mit dem Manipulicren von Matrizen. Solchc und cinige andere Besonderheiten werden im folgenden herausgegriffen.
2.2 2.2.1
Kostproben aus MATLABs Programmiertechniken Vekt orisierung
Beginnen wir mit einem Standardbeispiel: Es sol1 cine Hilbert-Matrix H crzcugt werden:
=
1 .
.
2 + p 1
Mit DO- oder FOR- Schleifen aufgewachsen wird man gcneigt sein, ctwa folgendes Script File zu schreiben:
i=l:n j=l:n H (i ,j ) =1/ (i +j- 1) ; end end for for
Etwas bcsser, d. h. schneller, ware es, die Matrix mit Nullcn vorzubcsctzcn, so dafl der Interpreter nicht bei jedem Schtitt ncucn Platz im Arbeitsspcichcr
schaffen mui3, also: H=zeros( n,n); for i = l : n for j = l : n H( i,j)=l/( i+j-l); end end
Noch besser ware es, wenn man vor dem Programmieren etwas iiberlcgtc, in dcr Modellierungsphase sozusagen, und erkennen und beriicksichtigen wiirdc, dai3 eine Hilbert-Matrix symmetrisch ist:
H=zeros( n,n); for i = l : n
2.2 Kostproben aus MATLABs Programmiertechniken 7 for j=i:n H(i,j)=l/(i+j-1);
H(j ,i)=H(i,j); end end
Die beste Losung, und die einzige, die MATLAB angemessen ist, ist eine vektorisiertc Form, etwa i=l:n;j=l:n; A=ones( n,n)./(i’*ones( l,n)+ones( n,l)*j-1);
oder die noch etwas ilbersichtlichere Codierung im MATLAB-File hzlb. An diesc Stelle paflt vielleicht der MATLAB-Spruch: Lzfe zs too short to spend wrztzng for loops. Wenn Sic diese Programme so erweitcrn, dafl sie x-ma1 durchlaufcn werden, konncn sic mit tzc und toc die Unterschiede in den Rechenzeiten sehcn; x sollte so groB gcwahlt werden, dafl die Rechenzeiten mindestens im Sekundenbcrcich licgen, um vcrlalich zu sein.
2.2.2
Matrizenmanipulation
Grcifen wir cin wenig vor und betrachten ein etwas komplexeres Problcm. Es sollen die DGls
dx
- = NR r(x) dt fur einen umfangreichen Elcmentarmcchanismus aufgestcllt werdcn. Wie man mit Hilfe von MATLABs Zcichenkettenverarbeitungeinen Reaktionsmechanismus geschickt eingibt und dann automatisch die Reaktionsmatrix und die Geschwindigkcitsgleichungen erzeugen l&, ist Gcgenstand von Problemen im Abschnitt 3.4. Mit der Reaktionsmatrix NR kann man aber auch dic Reaktionsgeschwindigkeiten r(x) direkt berechnen, wobei wir Hin- und Riickreaktionen als cinzclnc Schritte auffassen wollen. Wir mochten also ein UP schreibcn, dcm Werte von x ubergeben werden, und das Werte von r zuriickgibt. Nehmen wir das Reaktionsschema
A+B C+B 2B C+D
-+ -+
-+ --t
C+D E F A+B
8 2 MATLAB und SIMULINK
Es hat die Reaktionsmatrix NR=[-1 0 0 1;-1 -1 -2 1;l -1 0 - 1 ; l 0 0 -l;O 1 0 0;O 0
lo]
NR = - 1 0 0 1 -1 -1 -2 I 1 -1 0 -1 I 0 0-1 0 1 0 0 0 0 1 0
Dann konnte unser U P folgendermden aussehen: function r =rate(x) global NR k %k ist der Vektor der Geschwindigkeitskonstantcn% for i=1:4 j =f ind ( NR( :,i)<0) ; r(i)=k(i)*prod(x(j). ^abs( NR(j,i))); end r=r’;
Unser Beispiel sol1 zeigcn, wic man die Moglichkeit dcr Vektorindizicrung ausnutzen kann. Fiir kleine Reaktionssystemc konnte man natiirlich auch dic Geschwindigkeitgleichungen unmittelbar codieren, also r( l ) = k ( l)*x( 1)*x(2);
usw. schreibcn. Bci groi3crcn Systcmen konnte man auf dem gezeigten Weg der Fehleranfalligkeit einer unmittclbaren Codierung begegncn. Allerdings ist der Weg zwar bcquem, aber nicht dcr schnellste: Es warc besscr, die Indcxvektorcn nicht bci jcdeni Aufruf ncu zu berechncn, sondern cinmal vorhcr und dann dcm U P zur Verfiigung zu stcllen. Haben Sic dazu cine Idee?
2.2.3
Zeichenkettenverarbeitung
Die Zeichenkcttenverarbeitunglai3t sich in vielfaltiger Weisc nutzcn, um Programmschritte automatisch zu crzeugen; dazu gibt cs in diescm Buch zahlreiche Beispiele. Nehmen wir als Beispicl das Problem am Endc des vorigen Abschnitts. Wic kann man es errcichen, dic Indexvcktoren dcm UP zur Verfugung zu stcllcn? Es warc schon, wenn man sie zu cincr Matrix zusammenfasscn konntc, denn sonst wiirde bereits die global-Anwcisung in Schreibarbcit ausarten. Dicsem Wunsch steht die unterschicdlichc Lange dcr Vektorcn cntgegcn. Wir konncn aber dic Vektorcn in Strings umformcn und dann zu ciner String-Matrix zuammenfassen; die mui3 dann im UP nur noch zuruckkonvcrticrt wcrden:
2.2 Kostproben aus MATLABs Programmiertechniken
9
jms=[]; for i=1:4 j=find(NR(:,i)
Das entsprechend vertinderte UP: function r =rate(x) global NR jms k %k ist der Vektor der Geschwindigkeitskonstanten for i=1:4 j=str2num(jms(i,:)) r( i)=k( i)*prod(x(j). a bs( NR(j,i))); end r=r ; A
Besondere Bedeutung kommt der Zeichenkettenverarbeitungim Zusammenhang mit dem mtichtigen Befehl eval zu.
2.2.4
MATLABs Befehl eval
Sehr vielseitig verwendbar ist der Befehl eval, der als Argument eine Textvariable s (Zeichenkette oder string) hat. eval(s) l&Bt den MATLAB-Interpreter den string s wie eine Anweisung auswerten. Zum Beispiel geben die Anweisungen a=5 und eval('a=5') dasselbe Ergebnis: a = 5
Das scheint nicht vie1 Sinn zu machen. Interessant wird cs abcr, wenn man sich Zeichenketten zusammenbaut. Nehmen wir an, wir mochten ein DG1System mit n Satzen von Anfangswerten losen und die Ergebnisse speichern. Dazu codiercn wir das DG1-System in einem U P func, erzeugen eine Matrix dcrcn Spalten die Anfangswertsgtze enthalten, rufen den passenden DG1-Loser in eincr Schleife auf und speichern die Ergebnisse in den Vektoren t l , t2, ...,tn und den Matrizen x l , x 2 ,..., xn:
e,
for i= l: n xO=xOm(:, i); [t,x]=ode45( 'func',tspan,xO); evaI( ['t',num2str(i),'=t;']) eval(['x',num2str(i),'=x;']) end
oder noch kompakter:
10 2 MATLAB und SIMULINK for i = l : n
,’I
eval( [ ’[t’,num%tr(i) ,’,x’,num2str(i) =. .. ...ode45(”func” ,tspan,xOm(:,’,num%tr(i), ’ ) ) ; I ] ) end
(Hochkommas innerhalb von Zeichenkettcn wcrdcn durch zwci Hochkommas crzcugt .)
2.3
MATLAB-Programme oder SIMULINK-Modelle?
Wic im vorigen Abschnitt beispielhaft gczeigt, lasscn sich im MATLAB schr kompaktc Programme schreiben. Man sollte aber bedenken, dai3 MATLAB cine Interprctersprachc ist und die Programme cntsprechend langsam ausgefuhrt werden. SIMULINK hingegen ist eine grafische Oberflachc zur Programmicrung in C. Wenn man sich an dic Blockschaltbildcr gewohnt hat - was besondcrs dem Naturwissenschaftlcr am Anfang ungcwohnt sein mag - kann man fur viele Problcmc statt cincs MATLAB-Programms ein SIMULINK-Modcll erstcllcn, meist mit ctwas mchr Aufwand; die im Hintergrund crzeugten compiliertcn C-Programme arbeiten dann aber im allgcmeinen bctrachtlich schnellcr als dcr MATLAB-Interpreter. Vereinfachend kann man die in dcr Kapiteluberschrift gestellte Fragc daher auch umdeuten in ,,cntwcdcr bequcm odcr schncll“. Ganz so cinfach ist cs allerdings nicht, zwischcn dicscn Moglichkciten und ihrcn Zwischcnformen zu wahlcn. Wir werdcn sehen, wic man in viclcn Fallen dcni idcalen Ziel ,,bcqucm und schnell“ nahekommcn kann. Gelcgcntlich ist die Wahl auch cinfach: Linearc AGls wird wohl niemand mit SIMULINK angehcn, das j a auf dynamischc Systcme zugeschnitten 1st; nichtlinearc AGls gelcgentlich schon, wenn sie in dynamische Systeme eingebettet sind. Vielc Probleme der CRT fiihren aber auf DGls, und dann ist die Wahlmoglichkeit zwischen eincm rcincn MATLAB-Programm, einem reinen SIMULINK-Model1 oder Zwischcnformcn gcgcbcn. Wir betrachtcn im folgenden cin verhaltnismaiaig cinfachcs Bcispicl, das uns nicht nur die Wahlmoglichkciten zwischcn verschicdencn Progranimierwcgen diskutieren laBt, sondcrn uns gieichzcitig auch zcigt, wic man mit MATLAB odcr SIMULINK PDGls angehcn kann. (Es sei an diescr Stcllc vorweggcnommcn, dai3 die PDGl-Toolbox von MATLAB fur dic PDGls, dic wir normalcrwcisc in dcr CRT antreffen, nur wenig zu bieten hat.) Wir betrachten die Wiirmeleitungsgleichung
mit folgenden Rand- und Anfangsbedingungcn:
z=O:T=O,
z=l:T=O
fiirallet
2.3 MATLAB-Programme oder SIMULINK-Modelle? 11
t = 0 : T = f(z)
(2.9)
Als Anfangsprofil f ( z ) wlhlen wir f ( z ) = z fiir 0 5 z 5 0.5, f ( z ) = 1 - z filr 0.5 < z 5 1
(2.10)
also ein iiber z aufgespanntes gleichschenkliges Dreieck. Fur den T-abhangigen Parameter a nehmen wir an:
a ( T ) = 1+ T
(2.11)
Zur Losung diskretisieren wir die z-Koordinate nach der finiten Volumenmethode (FVM) und erhalten das DG1-System
dT dt
-=AT
(2.12)
+
Dcr ( N z 1,1)-Vektor T enthtilt die T-Werte an den N z + 1 Stiltzstellen der Diskretisierung; A ist eine tridiagonale Matrix, deren Eintrage wir wie folgt benennen:
A=
[
aP(1) a E ( 1 ) aW(1) aP(2) aE(2)
a W ( N z - 1) a P ( N z ) aE(N2) a W ( N z ) a P ( N z + 1) (2.13)
Die Elemente von A werden wie folgt besetzt:
aE(2) =
1
+
T(i+l)+T(Zl 2
dz2
,
2
= l...Nz
aW(2) = u E ( i ) , 2 = l...NZ aP(i) = -(aE(i) + aW(i - l ) ) , i = 2 . . . N z
(2.14a) (2.14b) ( 2 .1 4 ~ )
= 0 = 0
(2.14d) (2.14e)
aE(1) = 0
(2.14f)
aW(Nz) = 0
(2.14g)
aP(1) aP(Nz+l)
wobei dz = l / N z .
12 2 M A T L A B und SIMULINK Wie diese Glcichungcn, Variablen und Wcrtc zustandekommen, braucht Sic im Augcnblick nicht zu kummern. Die FVM wird im Abschnitt 5.4.2 bcsprochen, die Linicnmethode im Abschnitt 5.4.3; im Abschnitt 5.5.11 werdcn Sic mit dem Problem konfrontiert, die instationgrc Warmeleitungsgleichung mit der Linienmethode selbst zu losen, allerdings mit konstantem Parameter c2. Es sei noch angemerkt: Fur die Werte des Leitfahigkeitskoeffizienten a ( T ) an den Bilanzraumgrenzen wurde das arithmetischc Mittel zwischen dcn bcnachbarten Gitterpunkten cingesetzt; wegen der nur gcringen Unterschiede ist das hier zulilssig, ansonsten ist das harmonische Mittel besser geeignet. Wir schreiben nun ein MATLAB-Programm zur Berechnung der Matrix A: WGL - F V M - NL
function AS =wgl-fvm-nl(T) global Nz dz2 dz=l/Nz; z=O:dz:l; aE=( l+(T(2:Nztl)+T(l:Nz))/2)/dz^ 2; aW=aE; aE(l)=O; aW( Nz)=O; aP=-(aE(2: Nz)+aW( 1:Nz-1)); a P=[O;a P;O]; D=sparse( 1:Nz+ 1,l:Nz+ 1,a P); W=sparse(2:Nz+l,l:Nz,aW,Nz+l,Nz+l,Nz); E=sparse( l:Nz,2:Nz+l,aE,Nz+l,Nz+l,Nz); AS=W+D+E;
Die Berechnung der Matrixelemente ist vektorisiert; Matrix A wird aus ihnen als sparse Matrix erzcugt, um Speichcrplatz und Rechenzcit zu sparcn. Wir setzen dic Programmvariablen Nz und TO (sie cntsprechcn den obigcn Variablen N z und T o ) ,zusammen mit z, dz und dz2, global Nz z dz dz2 Nz=400;%fur SE nur 100 d~=l/Nz;d~2=dz*dz; z=O:dz:l; TO=[z( 1:Nz/2+1), 1-Z(Nz/2+2: Nz+l)];
und starten die Integration mit tic;[t,x]=odel5s('wgI-fvm-nl-kin',[O elapsed-time = 2.1672e+001
Die Tempcraturprofilc zwischen t Abb. 2.1 zu schcn.
=
11,TO);toc
0 und t
=
0.54 sind in dcr folgcndcn
2.3 MATLAB-Programme oder SIMULINK-Modelle? 13
I
Abbildung 2.1: Temperaturprofile nach t=[0 0.0001 0.0009 0.0067 0.0335 0.1173
0.3026 0.54101. Wic kann man die Rechenzeit verkiirzen? Am einfachstcn scheint es zu sein, das File WGL-FVM-NL mit dem MATLAB-Compiler (falls man ihn besitzt) in eine C MEX-file S-function zu iibersetzen und in ein SIMULINK-Model1 einzubinden. Dafiir mussen wir aber Abschied von der sparsen Matrizentechnik nehmen, denn die akzeptiert der Compiler nicht in der bisherigen Version 1.2; die new Version 2.0 akzeptiert zwar sparse Matrizen, aber optimiert den Code nicht. Es gibt mehrere Auswege: 0
0
Version 2.0 benutzen Version 1.2 benutzen mit voller Matrix A. Bei nicht zu groi3en Matrizen gcwinnt man immer noch Zeit dic Matrix-Vektor-Multiplikation A T in Vektor-Vektor-Multiplikationen zcrlegcn.
Die erste Moglichkeit moge der Leser selbst versuchen. Fur die zweite kann dcr Aufbau dcr sparsen Matrix AS im Programm WGL -FVM-NL ersetzt werden durch dic Anweisung AS=diag(aP,O)+diag(aE,l)+diag(aW,-1);
Die dritte ist etwas unbequemer, da man erst die Vektorprodukte selbst formuliercn mu& verspricht aber einen grofieren Gewinn an Rechenzeit: Man berechnet im UP unmittelbar das Produkt
14 2 MATLAB und SIMULINK
d y = d T / d t = AT
WGL-FVM -NL-
(2.15)
DY
function dy =wgl-fvm-nl-dy(T) global Nz dz2 dz=l/Nz; z=O:dz: 1; aE=( l+(T(2:Nz+l)+T( l:Nz))/2)/dz2; aW=aE; aE( 1)=0; a W (Nz)=O; aP=-(aE(2: Nz)+aW( 1:Nz-1)); aP=[O;aP;O]; dyl=T.*aP; dy2=dyl+[O;T( l:Nz).*aW]; dy=dy2+[T( 2: Nz+l), *a E;O];
Dieses Program wird in einc C MEX-,file 5’-function ubersctzt (mit den Optioncn -ri) und in cin einfaches SIMULINK-Modcll eingcbunden (Abb. 2.2).
simout
* w gI-fvm-n
To Workspace
I-d y Integrator
Abbildung 2.2: SIMULINK-Model1 mit compiliertem MATLAB-Programm als S-Funktion zur Losung einer instationgren Warmeleitungsgleichung mit variablem Parameter nach dcr Linicnmethode.
Ein Rechenlauf wird aus dcm MATLAB-Fenster gestartet, um die Zcit zu stoppen:
2.3 MATLAB-Programme oder SIMULINK-Modelle?
15
global Nz z dz dz2
Nz=400; dz=l/Nz;dz2=dz*dz; z=O:dz:l; TO= [z( 1:Nz/2+ l),1-z( Nz/2+2: Nz+l)]; tic; [tl,XI] =sim( 'wgl -fvm-sys');toc elapsed-time =
4.5160 Also eine Zeitreduzierung um den Faktor 4.7. Man konnte auch daran denken, WGL-FVM-NL-DY in ,,neuer-Name" umzubenennen, in ein UP fiir den DG1-Loser umzuwandeln (durch Anderung der Argumentenliste in (t,T)),in ein C MEX-file zu compilicren und dann durch die Anwcisung [t,x]=odel5s('neuer-Name'.[O 11,TO) zu starten. Probieren Sie cs bitte! Wird die Rechenzeit wesentlich reduziert? Konnen Sie den Erfolg oder Miocrfolg interpretieren? (Sehen Sie dazu die Anmerkungen im CompilerHandbuch Why Compile M-files ? !) Konncn wir noch mehr beschleunigen? Wir konnen versuchen, die Rechenschrittc aus wGL-FVM-NL-DY ausnahmslos mit Bibliotheksblocken von SIMULINK zu implementieren. Das ist bei einigcr Ubung gar nicht so aufwendig, wic cs auf den ersten Blick vielleicht scheinen mag, aber etwas geht es doch in dic Richtung ,,weniger bequcm, dafiir schneller". Ein groaer Gewinn ist bei diesem einfachen Beispiel nicht mehr zu erwarten:
Nz=400;%100 fiir SE dz=l/Nz; z=O:dz:l; TO=(Z(~:NZ/~+~),~-Z(NZ/~+~:NZ+~)]; tic; [tI,xI]=si m( 'wgl -fvm-fcn-sys');toc elapsed- t ime = 4.1090
Also noch einmal10 %. Das SIMULINK-Model1w G L - F V M _ F C X - S Y S . M D L schen Sie sich am besten am Bildschirm an; es sei Ihnen iiberlassen, dcn Variablenflua zu markieren. Wcnn man nicht mit jeder kleinen Zeitspanne geizen mu& kann man im vorlicgcnden Beispiel wohl den zweiten Fall, das SIMULINK-Model1 mit dem ubersctzten M-File WGL-FVM-NL-DY als schnell und bequem einstufen. Eine noch etwas bessere Moglichkeit werden wir im ntichsten Abschnitt kenncnlernen. Zuntichst aber noch ein Beispiel fur eine Zwischenform, bei der die Vorteile beidcr Programmierarten besonders deutlich verbunden sind. Es handelt sich um das Model1 eines konzentrationsgeregelten Krcislaufreaktors mit Abtastregelung (Abb. 2.3). Die schon lange vor dem Regelentwurf programmierten dynamischen Gleichungen des Reaktors sind in der S-Funktion ccrr6 cingebunden; es erschien nicht sinnvoll, das fertige, getestete Programm zu tindern. Die Berechnung der Zustromtinderungen fur die Schliisselkomponenten
16 2 MATLAB und SIMULINK
Abbildung 2.3: Konzentrationsgcregelter Kreislaufrcaktor mit rckursivcni I-Algorithmus und Onlinc-Adaptierung. erfolgt in der S-finktion fak6; entscheidend fur diese Wahl war die Moglichkcit, das Programm fak6 austauschen zu konnen, um das Modell wechselnden Anforderungen anzupassen. Die anderen Modellbaustcinc der Versuchsanlage lasscn sich einfacher als SIMULINK-Blocke implementicren: Dic beidcn Rcgler sind diskretc Ubertragungsfunktionen; wenn num(z) als [l 0) gcwahlt wird, entstcht ein rekursivcr I-Reglcr, der fur lange Totzeiten gceignet ist. Totzeitcn wcrdcn vor allem durch langc Analysenzciten bcwirkt; Analyse 1 und 2 sind ebenfalls diskrcte Ubertragungsfunktionen, die in der Form das Zeitvcrhalten eincs Gaschromatographen simulieren. Die bciden andcren :-Blockc haltcn die Analysenergebnisse um ein Abtastintervall der Reglcr zuruck, damit im Fall geringcr Regelkreiskopplungen die Regclkoeffizienten in fak6 adaptiert werdcn konncn. Bei signifikanten Kopplungen wird fak6 durch cin entsprechendes Programni ersetzt. Die skizziertc Art der Rcgelung verspricht nach allen Simulationscrgcbnisscn, mit langen Totzciten und starken Regclkreiskopplungen fertigzuwerdcn, l a t sich aber auch - fur klcinc Totzeiten - leicht in einen diskreten PID-Reglcr umwandeln [a]. S-Funktionen sind also SIMULINKs Tor zur MATLAB-Sprachc, aber auch zu den Programmicrsprachen FORTRAN und C, wie das folgendc Kapitel zcigt.
2.4 S-Funktionen, C und FORTRAN
2.4
17
S-Funktionen, C und FORTRAN
SIMULINK-Modelle sind S-Funktionen, so ist es kein Wunder, dai3 man SFunktionen auch als Modellbausteine verwenden kann. Man kann sie als M-file S-function schreiben, in C oder in FORTRAN; Muster nehmen in vielen F&llen die Arbeit ab, die recht grauslich aussehenden Verbindungen zu MATLAB selbst zu schreiben. M-file S-functions sind bequem, aber langsam; wir werden uns an dieser Stelle nicht weiter mit ihnen beschiiftigen. S-Funktionen in C, als C MEX-,file S-functions bezeichnet, sind mindestens so schnell wie Blockschaltungen, meistens noch etwas schneller. Eigentlich widerspricht es der MATLABPhilosophie ,,Life is too short to spend writing for loops ", solche C-Programme zu schreiben, aber gelegentlich kann man sie mit Vorteil benutzen. Greifen wir das Problem der instationtiren Wiirmeleitungsgleichung mit nicht-konstantem Koeffizienten aus dem vorigen Kapitel wieder auf und berechnen das nach der Diskretisierung entstandene DG1-System d y = dT/dt = AT (Gl. (2.15)). Im Prinzip miissen wir nur das Gleichungsystem (2.14) und das Produkt AT in C codieren. AT berechnen wir am einfachsten und am schnellsten als Summe von Vektor-Vektor-Produkten,so wie es im Programm WGL-FVM-NL-DY als .MATLAB-Anweisungen codiert ist: dyl=T.*aP; dy2=dyl+[O;T( l:Nz).*aW]; dy=dy2+[T(2: Nz+l).*aE;O];
Die cigenen Eintrage in die Musterdatei sfuntmp1.c - im folgenden Ausdruck fett zeigen, da!3 man (nach einiger Ubung) mit wenig Aufwand eine kompliziert aussehende S-Funktion erzeugen kann; die Moglichkeiten zur Fehlerkontrolle sind allerdings nicht genutzt:
-
I* * sfuntmp1.c: C template for a level 2 S-function. Nicht geeignet fur SE' * * * I See matlabroot/simulink/src/sfuntmpl.docfor a more detailed template 1 * * * Copyright (c) 1990-1998 by The Mathworks, Inc. All Rights Reserved. * $Revision: 1.18 $ *I I* * You must specify the S-FUNCTION-NAME as the name of 'Als einfachcres Beispiel fur level 1 S-functzons, die auch mit der SE benutzt wcrden kt)nlien, betrachten Sie hitte, wenn Sie wollen, die (1,l)-Folgereaktion im Ahschnitt 3.3.2, Untcrilhschnitt, ,,SIMULINK-Model1 mit C MEX-File S-Function "; sie ist dort, sowohl als level 1 als anch als level 2 S-function implementiert.
18 2 MATLAB und SIMULINK your S-function (i.e. replace sfuntmpl with the name of your S-function).
*
*/ #define S-FUNCTION-LEVEL 2 #define S-FUNCTION-NAME wgl -sim
/* * Need to include simstruc.h for the definition of the SimStruct
* its associated macro definitions.
and
*/ #include ”simstruc.h”
#include <malloc.h> #define U(e1ement) (*uPtrs[element]) /* Pointer to Input Port0 */ #define Nz(S) ssGetSFcnParam(S,O) #define dzZ(S) ssGetSFcnParam(S,l) /* Error handling
* *
* You should use the following technique to report errors encountered within * an S-function: * * ssSetErrorStatus(S,”Error encountered due to ...”) ; * return; * * Note that the 2nd argument to ssSetErrorStatus must
be persistent memory. * It cannot be a local variable. For example the following will cause * unpredictable errors:
*
* mdlOutputs() * { * char msg[256]; {ILLEGAL: to fix use ”static char msg[256];”} * sprintf(msg,”Error due to %s”,string); * ssSetErrorStatus(S,msg); * return;
*I * See matlabroot/simulink/src/sfunctmpl.docfor more details. *I /*====================*
* S-function methods * *___-____-______-----* .................... I /* Function: mdlInitializeSizes ....................
* Abstract: * The sizes information is used by Simulink to determine the S-function * block’s characteristics
(number of inputs, outputs, states, etc.).
2.4 S-Funktionen, C und FORTRAN
19
*/
static void mdlInitializeSizes(SimStruct *S)
{
/* See sfuntmpLdoc for more details on the macros below */ ssSetNumSFcnParams(S, 2); /* Number of expected parameters */ if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { /* Return if number of expected != number of actual parameters return;
*/
1
ssSetNumContStates(S, 0); ssSetNumDiscStates(S, 0); if (!ssSetNumInputPorts(S, 1))return; ssSctInputPortWidth(S, 0, DYNAMICALLY -SIZED); ssSetInputPortDirectFeedThrough(S, 0, 1); if (!ssSetNumOutputPorts(S, 1))return; ssSetOutputPortWidth(S, 0, DYNAMICALLY -SIZED); ssSetNumSampleTimes(S, 1); ssSetNumRWork(S, 0); ssSetNumIWork(S, 0) ; ssSctNumPWork(S, 0); ssSctNumModes(S, 0); ssSctNumNonsampledZCs(S, 0); ssSctOptions(S, 0);
1
/* Function: * Abstract:
mdlInitializeSampleTimes ===============
* This function is used to specify the sample time(s) for your
* S-function. You must register the same number of sample times as
* specified in ssSetNumSampleTimes.
*/
static void mdlInitializeSampleTimes(SimStruct*S) { ssSctSampleTime(S, 0, CONTINUOUS-SAMPLE-TIME); ssSetOffsetTime(S, 0, 0.0);
1
#define MDL-INITIALIZE-CONDITIONS /* Change to #undef to remove function */ #if defined(MDL~INITIALIZE~CONDITIONS) / * Function: mdlInitializeConditions =========== == * Abstract: * In this function, you should initialize the continuous and discrete * states for your S-function block. The initial states are placed * in the state vector, ssGetContStates(S) or ssGetRealDiscStates(S). * You can also perform any other initialization activities that your * S-function may require. Note, this routine will be called at the * start of simulation and if it is present in an enabled subsystem 5
20
2 M A T L A B und SIMULINK
* configured to reset states, it will be call when the enabled subsystem * restarts execution to reset the states. */ static void mdlInitializeConditions (SimStr uct * S) {
1
#endif /* MDL INITIALIZE-CONDITIONS */ #define MDL-START /* Change to #undef to remove function */ #if defined(MDL-START) /* Function: mdlstart ======= * Abstract: * This function is called once at start of model execution. If you * have states that should be initialized once, this is thc place * to do it.
========
*/
static void mdlStart(SimStruct *S)
{
1
#endif /* MDL-START */ /* Function: mdloutputs . . . . . . . . . . . . . . . . . . . . . * Abstract: * In this function, you computc the outputs of your S-function * block. Generally outputs are placed in the output vector, ssGetY(S).
*/
static void mdlOutputs(SimStruct *S, int-T tid) { real T *y = ssGetOutputPortRealSignal(f3,O); InpucRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,O); int T Nz = *mxGetPr(Nz(S)); real T dz2 = *mxGetPr(dz2(S)); ~ Eo []~, o o o~P[IOOO]; ], /*real T ~ w [ ~ o o besserist eine dynamische Zuweisung*/ real T *aW, *aE,*aP; i n t r i; aWG(real-T *) malloc(Nz*sizeof(real T)); aE=(real T *) malloc(Nz*sizeof(real 3)); aP=(real-T *) malloc( (Nz+l)*sizeof(real -T)); for (i=O;i
I
for (i=l;i
1
aP [O] =O;aP [Nz]=O;aE[O]=O;aW[Nz-l] =O; for (i=l;i
2.4 S-Funktionen, C und FORTRAN
21
1
y [O]=aP [0] *U(0)+aE [O]*U(1);
y[Nz]=aW [Nz-1]*U(Nz-1)+aP [Nz]*U(Nz); free (aW) ; free( aE); free (aP);
1
#define MDL-UPDATE /* Change to #undef to remove function */ #if defined(MDL-UPDATE) /* Function: mdlupdate ================== * Abstract: * This function is called once for every major integration time step. * Discrete states are typically updated here, but this function is useful * for performing any tasks that should only take place once per * integration step.
*I
static void mdlUpdate(SimStruct *S, int-T tid) {
1
#endif /* MDL-UPDATE */ #define MDL-DERIVATIVES /* Change to #undef to remove function #if dcfined(MDL-DERIVATIVES) /* Function: mdlDerivatives =============== * Abstract: * In this function, you compute the S-function block’s derivatives. * The derivatives are placed in the derivative vector, ssGetdX(S).
*/
static void mdlDerivatives(SimStruct *S) {
1
#endif /* MDL-DERTVATIVES */ / * Function: mdlTerminate ================= * Abstract: * In this function, you should perform any actions that are necessary * a t the termination of a simulation. For example, if memory was * allocated in mdlInitializeConditions, this is the place to free it.
*/
static void mdlTerminate(SimStruct *S)
{
1 * SCCsfuntmpl.doc for the optional S-function methods *
/*=============================*
*__--_______-_________---_----* .............................
................................ * Required S-function trailer *
/
*/
22
2 MATLAB und SIMULINK
#ifdef MATLAB-MEX-FILE
*/ #include "simu1ink.c" #else #include "cg-sfun.h" #endif
/* Is this file being compiled as a MEX-file?
/* MEX-file interface
/* Code generation
mechanism
*/
registration function
*/
Diese S-Funktion ist in das SIMULINK-Modell WGL-SIM-SYS cingebcttet, als externe Parameter werden Nz und dz2 ubergeben. Ein Lauf, aus dem MATLAB-Fenster gestartet, ergibt: wgl -fvm%erzeugt Nz (=lo) und dz2=dzA2 tic;[t,y]=sim('wgI~sim~sys');toc elapsed-time =
3.5000
also noch einmal eine deutliche Reduzierung der Rechcnzeit gegcnuber dcm Block-Model1 (s. vorigen Abschnitt). Wcnn man C-Programme aus Bibliothekcn einbinden kann, lassen sich auch umfangreichere C MEX-file S-functions ohne grol3en Programmieraufwand crstellcn. Vermutlich wird niemand eine Matrix-Inversion selbst programmicrcn, sondern ein Bibliotheksprogramm einbinden; das geschieht im Abschnitt 4.1.2, in dem ein DAG1-System auf die Form
(2.16) gcbracht wird, rnit invertierbarer, von y abhiingiger Matrix B, und mit einem SIMULINK-Model1 simuliert wird. Da die FORTRAN-Bibliotheken immer noch mafigebend fur numerisches Rechnen sind, ist es erfreulich, dai3 man auch FORTRAN-Programme in SFunktionen einbinden kann. Im Extremfall kann ein SIMULINK-Model1 nur aus einer S-Funktion und einigen Blocken zur Ein- und Ausgabe bestehen, vor allem naturlich far die Online-Visualisierung - man kann also SIMULINK als reine ,,Visualisierungsmaschine " fur FORTRAN (oder C) benutzen. In gewisscm Sinne geschieht das im Problem 4.4.5, mit dcr Besonderheit, dal3 ein externcs FORTRAN-Programm zur Losung von DAGls eingesetzt wird. Im Normalfall werden aber fertige Programme, cingebunden in S-Funktioncn, nur Tcilc cincs SIMULINK-Modells sein; andere Programmteile lassen sich oft vicl einfacher als Blocke aus der SIMULINK-Bibliothek einfugcn, z. B. Integratoren oder Regler, wie es das Beispiel ,,Konzentrationsgeregelter Kreislaufreaktor " am Ende dcs vorigen Abschnitts gezeigt hat.
2.5 Erweiterungen und Toolboxen
23
Erweiterungen und Toolboxen
2.5 2.5.1
MATLAB-Compiler
Neben SIMULINK, das mit MATLAB unsere Grundlage bildet, ist der MATLABCompiler eine wichtige Erweiterung fur unsere Zwecke: Er konvertiert MATLABCode zu C-Code und compiliert diesen mit Hilfe eines externen C-Compilers zu einem C MEX-file, das von MATLAB aus aufrufbar ist und dynamisch in den Rechenablauf eingebunden wird. Seit der Compiler-Version 1.2 konncn auch C MEX-,file S-functions erzeugt werden, wovon in diesem Buch gelegentlich Gebrauch gemacht wird. So kann man Rechenzeiten u. U. erheblich reduzieren. Der Compiler la& sich zusammen mit der MATLAB C Math Library auch verwenden, um konvertierte MATLAB-Programme zu eigenstandig ausfiihrbaren C/C++-Programmen (Exe-Files) zu machen (stand-alone executables), gegebencnfalls zusammen mit anderen C-Programmen. Auf diese zweite Moglichkeit wird in diesem Buch nicht eingegangen. Es gibt einige Einschrankungen fur die Verwendung des MATLAB-Compilers, z. B. kann die Anweisung eval nicht bearbcitet werden. Als externe C-Compiler werden zur Zeit unterstiitzt: 0
Watcom C Version 10.6 oder spatere Borland C++ Version 5.0 oder spatere
0
Xicrosoft Visual C++ Version 4.2 oder spatere.
2.5.2
Optimization Toolbox
MATLAB hat bereits einige sehr brauchbare eingebaute Optimiermethoden wie poly,fit oder fmins. Tkotzdem: Die Optimization Toolbox als unverzichtbar zu erklaren, ist nicht zu hoch gegriffen. Sie enthalt ausgefeilte Versionen einiger weit verbreiteter Optimieralgorithmen; genannt seien schlagwortartig: NelderMead, quasi-Newton mit der BFGS-Methode, Sequential Quadratic Programming, Gauss-Newton, Levenberg-Marquardt oder die Projektionsmethode fiir lineare und quadratische Programmierung. In den folgenden Kapiteln wird ausfiihrlich Gebrauch gemacht von der nichtlinearen Qudratsummenminimierung mit und ohne Nebenbedingungen (leastsq und constr) und von der Losung nichtlinearer algebraischer Gleichungssysteme (fsolve). Dazu kommen ein Problem der linearen Programmierung (lp) und eine Mehrzieloptimierung (attgoal).
2.5.3
Symbolic Math Toolbox
Auch auf dic Symbolic Math Toolbox kann man kaum verzichten. Etwa 60 hiiufig bcnutztc symbolische Operationen von MAPLE 5 sind in Form von M-Files wic MATLAB-Anweisungen zu benutzen, die Ergebnisse konnen unmittclbar in MATLAB-Opcrationen eingebunden werden. Daruber hinaus kann man ubcr den Bcfchl maple alle Funktionen in der Kernbibliothek und in dcr LineareAlgebra-Sammlung von MAPLE ansprechen.
24 2 M A T L A B und SIMULINK
Es gibt auch eine Extended Symbolic Math Toolbox, die alle nicht-grafischcn Sammlungen von MAPLE enthalt und es ermoglicht, MAPLES Programmicrtechniken und andere Prozeduren zu benutzen. Bei der Frage, ob man dicsc Erweiterung auch haben sollte, werden sich die Geister scheiden - das kann nur von Fall zu Fall entschieden werden. Es gibt noch einige andere Toolboxen, die das wissenschaftliche Rcchncn in der CRT erleichtern kiinnen, die man aber nicht unbedingt haben mui3 - cs sci denn, man habe sich auf ein bestimmtes Gebiet spczialisiert. Solchc Toolboxen seien im folgenden erwghnt.
2.5.4
Weit ere Toolboxen
Die Partial Differential Equation Toolbox bietet fur unserc Zwecke nicht vicl, weil sie auf lineare PDGls zugeschnitten ist mit Ausnahme nichtlinearcr clliptischer PDGls vom Typ -V . ( c ( u ) V u )+ u ( u ) u = f(u). Seit kurzem gibt es aber ein Softwarepaket FEMLAB der schwedischen Firma COMSOL AB, das auf MATLAB beruht und mit ihm eng verzahnt ist (www.comsol.se; das deutschc Bilro: www.comsol.de). Mit FEMLAB kann man nichtlineare PDGls aller Art angehen; einigc Anwendungen werden in den folgenden Kapiteln vorgestellt. Die Statistics Toolbox ist einer Uberlegung wert. Wir wcrden aber im Kapite17 sehen, wie man statistische Methodcn der Versuchsplanung und -auswertung sehr einfach mit den MATLAB-Mitteln fur unsere Zwecke makchneidern kann. Aukrdem steht zur Konkurrenz die NAG Foundation Toolbox, die Zugang zu den (FORTRAN)-Programmcn der Numerical Algorithms Group bietet; darunter finden sich viele statistische Routincn neben Optimierroutinen, Losern fur DGls und PDGls und anderen. Ein optionaler Zusatz, dcr N A G Gateway Generator, lauft leider nur auf Unix-Maschincn. Man kann aber auch auf andcren Wegen FORTRAN-Programme in MATLAB oder SIMULINK einbinden (siehc den lctzten Absatz des vorigen Abschnitts) , Programme, dic aus groi3cn Bibliotheken frei erhgltlich sind; insofern ist man auf die N A G Foundation Toolbox nicht angewiescn. Fur speziellc Anwendungen seien noch erwahnt: die Chernometrics Toolbox, die Fuzzy Logic Toolbox und die Neural Network Toolbox, die zur Demonstration im Anhang fur ein einfaches Beispiel eingcsetzt wird.
Kapitel 3
Stochiornetrie, Thermodynamik, Reaktionskinetik: Drei Saulen der CRT 3.1 3.1.1
Stochiometrische Gleichungen (Lineare Algebra) Stochiometrische Gleichungen aus der Element-Spezies-Matrix
In der Stochiometrie werden Atome geziihlt, Atome der chcmischen Elementc, die in den verschiedenen Spezies auftreten. Filr diese Atome gilt ein Erhaltungssatz (fiir andere Bausteine der Materie ebenfalls, wie z. B. filr die elektrische Ladung), deswegen kann man sic bilanzieren. ZweckmiiBig fa& man immer L Atome zusammen, wobei L die Loschmidtsche Zahl ist ( L = 6.022. Atome oder Molekule pro Mol); man ziihlt also Mole oder in stromenden Systemen Molstrome. Werfen wir einen Blick voraus auf den Reaktor in Abb. 3.1 oder Abb. 3.2: In den Reaktor stromt ein Methan/Wasserdampf-Gemisch und setzt sich an cinem Synthesegaskatalysator zu einem Gemisch um, das aus den Komponenten (,,Spezies") CH4, HzO, CO, Hz und C02 besteht. Durch wieviele und welchc stochiometrischen Beziehungen kann man dieses Reaktionssystem beschreiben? Wir stellen die Elementarbilanzen fiir den Reaktor auf: Im stationtircn Zustand kommen dort genausoviele Atome (bzw. Mole) der Elemente C, H und 0 heraus, wie hineinstromen, oder noch allgemeiner: Der Elementarstrom ist in jedem Querschnitt gleich groi3. Wenn wir Molstrome mit N bezeichnen, haben wir die folgenden drei Elementarbilanzen:
26
3 Stdchiometrie, Thermodynamik, Reaktionskinetik: Drei Sahlen der C R T
Tabelle 3.1: Element-Spczies-Matrix. CH4 HzO CO Hz- COzc 1 0 1 0 1 H 4 2 0 2 0 0 0 1 1 0 2 C-Bilanz
H-Bilanz
0-Bilanz
Nco
+ N H ~+O2Nc0, = N:
(3.3)
Dic rcchten Seiten dieser Gleichungen sind Kurznotierungen fur dcn Zustrom, also
+
+
N: = N : ~ , N : ~ N : ~ ) ~
(3.4)
usw. Dic Gleichungen (3.1) bis (3.3) sind dic grundlegenden stochiomctrischcn Beziehungcn fiir das Reaktionsgemisch in dem stationgr arbcitendcn Fcstbcttreaktor der Abb. 3.1. Wir schreibcn sie zunachst in eincr kompaktcn Form, indern wir Elemcnte und Spezies in eincr Matrix anordncn, dcr Elemcnt-SpezicsMatrix; die Matrix-Eintrgge geben an, wic oft cin Elcmcnt in cincr Spczics cnthalten ist (Tab. 3.1). Mit
1 0 1 0 1 E S M = ( 40 1 2 1 0 0 2 2 0 )
(3.5)
konncn wir nun dic Gleichungcn (3.1) bis (3.3) kompakt in Matrix-Form schrciben:
ESM N =ESM No
(3.6)
3.1 Stdchiometrische Gleichungen (Lineare Algebra)
27
wobei N der Spaltenvektor
(3.7)
ist. Alles weitere sind nur noch Ableitungen oder Umformungen. Wir mochten z. B. wissen, wie die Anderungen der Molstrome in dem Reaktionssystem voneinander abhangen; als Anderungen definieren wir
G1. (3.6) konnen wir dann schreiben als
ESM A N = 0
(3.9)
Fur die fiinf Komponenten oder ihre Anderungen ANi, i = 1...5, haben wir also nur drei Gleichungen: G1. (3.9) ist ein lineares homogenes unterbestimmtes Gleichungssystem. Es hat unendlich viele Losungen. Wir konnen Losungen konstruieren, indem wir fiir zwei Unbekannte AN, beliebige Werte annehmen und dann die verbleibenden drei Gleichungen mit drci Unbekannten losen. Aus zwei Losungen dieser Art konnen wir beliebige andere Losungen durch Linearkombination erzeugen. Besonders vorteilhaft ist es, im ersten Schritt den beiden ausgewshlten AN, nacheinander die Wertepaare (1,O) und (0,l) zuzuweisen, ein Verfahren, das sich natiirlich auf groi3ere Gleichungssysteme tibertragen laat. Dann bekommt man einen fundamentalen Losungssatz, hier also zwei Losungsvektoren, AN(1)und AN(z),aus dem man, wie gesagt, durch Linearkombination beliebige andere Losungen erzeugen kann:
und c2 sind beliebige skalare Grof3en. In dem fundamentalen Losungssatz treten die beiden Komponenten nur jeweils in einer Losung auf; man nennt diese so ausgezeichneten Komponenten auch Schliisselkomponenten, die anderen Nichtschliisselkomponenten. Man kann dieses Verfahren leicht durchftihren; man m d nur nach Wahl der Schlusselkomponenten ein lineares Gleichungssystem losen. Zur Demonstration werden die Matrix ESM und der Vektor A N partitioniert: c1
28
3 Stochiometrie, Thermodynamik, Reaktionskinetik: Drei Stiulen der CRT
(3.11) 0 1 1 1 0 2
Wenn wir den beiden letzten Komponenten von A N die Werte 1 und 0 zuwcisen und dann alle bekannten Groi3en auf die rechte Seite bringen, erhaltcn wir ein nichthomogenes System von drei Gleichungen mit drei Unbekanntcn:
i)(:,=(%)
( 41 20 1o)(;m&)=-(; ANCH4 0 1 1
(3.12)
Im vorliegenden Fall konnten wir das Gleichungssystem leicht ,,zu FufYlosen. Wir wollen aber an diesem Beispicl das allgemeine Verfahrcn studicrcn. Daher nehmen wir die zweite Zuweisung 0 und 1 noch hinzu und fassen zusammen zu
(
1 0 1 4 2 0 ) 0 1 1
(
ANCH4 AN,,, AN,,
) ( ;) ( ; =-
0 2
)
(3.13)
Dieses Gleichungssystem ist von der Form
Ax=B
(3.14)
und hat die allgemeine Losung
x =A-~B
(3.15)
MATLAB erzeugt die Losung mit einem eigencn Operator, dem backslash:
x = A\B
(3.16)
Wir konnen in MATLAB die beiden Matrizen A und B bcquem aus dcr Element-Spezies-Matrix gewinnen. Die Matrix ESM besetzen wir am bestcn uber ihre Transponierte, also die Spezies-Element-Matrix SEM; in der MATLAB-Notation sieht das fiir unser Komponentcnsystem [CH4 H 2 0 CO H2 Con] wie folgt aus:
3.1 StUchiornetrische Gleichungen (Lineare Algebra)
29
SEM = [l 4 0;O2 1;l 0 l;O 2 0 ; l 0 21
sm 1 0 1 0 1
=
4 2 0 2 0
0 1 1 0 2
ESM = SEM' ESM = I 0 1 0 1 4 2 0 2 0 0 1 1 0 2
Wir bilden nun die Matrizen A und B entsprechend G1. (3.13): A = ESM(:,1:3); B = - ESM(:,4:5);
und gewinnen die beiden Losungen filr die ersten drei ANi: DelN123 = A\B DelN123 = -0.3333 0.3333 -0.3333 -0.6667 0.3333 -1.3333
Natiirlich htitten wir auf die Zwischenstufe mit A und B auch verzichten konnen: DelN123 = ESM(:,1:3) \ (-ESM(:,4:5)) DelN123 = -0.3333 0.3333 -0.3333 -0.6667 0.3333 -1.3333
Um die gesamte Losung zu erhalten, fugen wir noch die Werte 1 und 0 bzw. 0 und 1 fiir die Schliisselkomponenten hinzu: DelN = [DelN123;eye(2)] DelN = -0.3333 0.3333 -0.3333 -0.6667 0.3333 -1.3333 1.0000 0 1.0000 0
30 3 Sttrchiornetrie, Thermodynamik, Reaktionskinetik: Drei Siiulen der CRT In MATLAB kann die gesamte Prozedur mit cinem einzigcn Bcfehl ablaufcn. Dcr Befehl heifit rref und steht fur row reduced echelon form, also fur dic zeilenreduzierte gestaffelte Form. Wenn wir den Befehl auf die obige ElcmentSpezies-Matrix anwenden, erhalten wir: R=rref( ESM) R=
1.0000 0 0 0.3333 -0.3333 0 1.0000 0 0.3333 0.6667 0 0 1.0000 -0.3333 1.3333 Partitioniercn wir diese reduzierte Matrix R nach G1. (3.11) und formcn um entsprechend G1. (3.13), so sehen wir, daO die beidcn letzten Spalten von R, ncgativ genommen, bereits die Losung D elN123 sind, die wir nur noch um die Einheitsmatrix fur die Schlusselkomponenten zur vollstandigen Losung erweitern miissen. Ein fundamentales Losungssystem ist also D e l N = [-R(:,4:5);eye(2)] DelN = -0.3333 0.3333 -0.3333 -0.6667 0.3333 -1.3333 1.0000 0
0 1.0000
Zur Interpretation der Losung gchort, ihrc enge Verbindung zum Konzept der chemischen Gleichung zu erkennen. Die Komponenten von DelN bzw. A N geben j a die Anderungen der Molstrome (oder in gcschlosscncn Systemcn: der Molzahlen) an, die im Einklang mit dem Satz von der Erhaltung der Elemcntc sind, also dcn Elcmentarbilanzen. Man sicht den Zusammenhang zwischcn der Losungsmatrix D e l N und den in dcr Chcmie ublichcn Formclgleichungen vielleicht besser, wenn man das Gleichungssystem (3.9) mit dcr Losungsmatrix DelN in einer anderen Schreibweise darstellt. Wir bezeichncn dazu die E l c mente von D e l N als vij und die Spalten von ESM als m,.Dann lafit sich G1. (3.9) ausfiihrlicher schreiben als: nc
Cesm,
u z j = 0,
(3.17)
j = I....s
a=1
wobei in unserem Fall N = 5 und S = 2. Mit Werten:
-:( !)--:( !)+:(
b)+l( x ) + O (
i ) = O
(3.18)
3.1 Stdchiometrische Gleichungen (Lineare Algebra)
31
und
Wenn wir statt der vektoriellen Elementarzusammensetzungen die chemischen Symbole der Komponenten verwenden, gehen diese beiden Gleichungen uber in -1/3 CH4 - 1/3H20
+ 1/3CO + 1H2 + 0 COz = 0
(3.20)
und
1/3 CH4 - 2 / 3 H 2 0 - 4/3CO +OH2
+ 1C02 = 0
(3.21)
In der iiblichen Schreibweise ordnet man die Komponenten mit den negativcn stochiometrischen Koeffizienten auf der linkcn Seite der Gleichung an, die anderen auf der rechten. Ein Koeffizient 1 wird unterdruckt, ein Term mit dem Koeffizienten 0 weggelassen. Man kann fiir ganzzahlige Koeffizienten sorgen. Dann heii3en unsere beiden stochiometrischen Gleichungen: CH4
2 H2O
+ H2O = CO + 3H2
+ 4 CO = CH4 + 3 C02
(3.22)
(3.23)
Dicscn bcidcn stochiometrischen Gleichungen mussen dic Molstromandcrungcn im stationarcn Reaktor geniigen. Die lincare Algebra sagt nichts darilber aus, wieviclc und welche chcmischen Reaktionen tatsachlich ablaufen. Das ist kein algebraisches, sondern ein chcmisches Problem, insbesondere der Reaktionskinetik. Alle chemischen Reaktionen bzw. Reaktionsgleichungen (in dem betrachteten Komponentengemisch), dic ein Chemiker sich ausdenkt oder identifiziert, konnen aber aus der Fundamentallosung durch Linearkombination abgeleitet werden. Es kann zu Miherstandnissen und Vcrwirrung fuhren, wenn zwischen stochiomctrischen Gleichungen und chemischen Reaktionen nicht sauber unterschieden wird. Um das formal kenntlich zu machcn, werden in diesem Buch stochiometrische Gleichungen mit einem Gleichhcitszeichen formuliert , chemische Reaktionen mit Reaktionspfeilen. Damit folgen wir den Vorschlagen von R.W. Missen und W.R. Smith [3]. In ihrem Artikcl ist auch ein BASIC-Programm enthalten, das aus ciner Element-SpeziesMatrix und den chemischen Formeln der Komponenten stochiometrische Gleichungcn crzcugt. In dem File STOICH.M ist die Ubertragung dieses Programms
32 3 Sttlchiometrie, Therrnodynamik, Reaktionskinetik: Drei SBulen der CRT in die .MATLAB-Sprache zu finden. Der eigentlichc Rechenteil besteht nur aus zwci Anweisungen. Der Hauptteil generiert die stochiometrischcn Glcichungcn; er zeigt exemplarisch, dai3 die Stringverarbeitung in MATLAB sich nicht zu verstecken braucht. STOICH
% Das Script-File st0ich.m gibt einen Satz unabhaengiger stoechiometrischer Gleichungen aus. In der Workspace muessen bereitgestellt werden: Der Stringvektor Sp m i t den Komponenten und die Spezies-Element-Matrix SEM nach den beiden folgenden Mustern: Sp=['H2 H 2 0 CH4 CO CO2'];
SEM=[0,2,0;0,2,1;1,4,0;1,0,1;1,0,2]; Sp=['CIO2- H30+ C12 H 2 0 C103- C102']; SEM~[0,1,2,-1;3,0,1,1~0,2,0,0;2,0,1,0;0,1,3,-1~0,1,2,0]~%
%Berechnung dcr stochiometrischen Matrix R=[]; R=rref(SEM'); si=size( R); x=[]; x=[-R(: ,si( l)+l:si(2));eye(si(2)-si( NS=x;
NS (s. Text)%
l))];
%Aufbau der linken (1s) und rechten (rs) Seitc der stochiometrischen GleiSp mit Hilfe der stochiometrischen Matrix chung(en) aus dem Speziesvektor NS (= x)% x=x ; for i=I:si(2)-si(l) Is=[]; rs=[]; rern=Sp; for j=l:si(2) if x(i,j) == 0 [token,rem]=strtok( rem); elseif x(i,j) < 0 [token, rem] =strtok( rern); a bsx=a bs(x( i,j)); if absx == 1 Is=[ls,token ' else ls=[ls,num2str(abs(x(i,j))),' end elseif x(i,j) > 0 [token,rem]=strtok( rem); absx=abs(x(i ?j));
+ '1;
',token '
+ '1;
3.1 Stachiometrische Gleichungen (Lineare Algebra)
if absx == 1 rs=[rs,token ' 'I; else rs=[rs, num2str(abs(x(i j))),' ',token ' end
33
+
+ 'I;
end end siIs=size( Is); sirs=si ze (rs) ; disp([ls(l:sils(2)-3) ' = ' rs(l:sirs(2)-3)]) end
Wenn wir noch den Spezies-Stringvektor Sp besetzen, konnen wir durch Aufruf von STOICH die stochiometrischen Gleichungen (3.22) und (3.23) noch einmal in vereinfachter Schreibweise erzeugen: Sp = ['CH4 H 2 0 C O H 2 CO2'];
stoich 0.3333 CH4 + 0.3333 H20 = 0.3333 CO + H2 0.6667 H20 + 1.333 CO = 0.3333 CH4 + C02
Bevor wir im folgenden Abschnitt auf die stochiometrische Behandlung von Rcaktionsgleichungen eingehen, noch ein Hinweis und eine Zusammenfassung: Die Wahl der Schliisselkomponenten ist nicht vollig beliebig: In den Nichtschliisselkomponenten sollen nach einer allgemeinen Regel alle Elemente enthalten sein. Wenn das nicht der Fall ist, kann man es an der zeilenreduzierten gestaffelten Form erkennen (s. Problem 3.4.1). Bei stochiometrischen Rechnungen mit Meawerten sollte man die Schliisselkomponenten nicht nur nach dieser Regel wahlen, sondern darilber hinaus versuchen, durch geschickte Auswahl die Auswirkung der unvermeidlichen Meafehlcr in Schranken zu halten. Zusammenfassung
Bci chemischen Reaktionen bleiben die Elemente (genauer: die Atome der Elementc) crhalten. Diese Tatsache kann durch Elementarbilanzen ausgedriickt werden. Sie sind der Ausgangspunkt aller stochiometrischen Rechnungen - oder sollten es sein. Die Erzeugung stochiometrischer Gleichungen in der iiblichen Formelsprache der Chemie ist nur ein Beispiel fiir eine solche Rechnung, die im folgenden skizziert wird: Wenn alle Komponenten eines Gemisches bekannt sind, la& sich eine Mindestmcnge stochiometrischer Gleichungen aus der Element-Spezies-Matrix ESM erzeugcn. Das Ergebnis erscheint in Form einer stochiometrischen Matrix SN bzw. ihrer Transponierten In MATLAB benotigt man dazu nur zwei Anweisungen:
m.
34 3 Stochiometrie, Thermodynarnik, Reaktionskinetik: Drei Ssulen der CRT R = rref(ESM); NS = [-R(:,ne+l:nc);eye(nc-ne)]; %ne cntspricht E
R(:,1 : E ) mul3 die Einheitsmatrix sein, sonst sind die Schlusselkomponcnten in den Spalten ESM(:,E 1 : N ) ungeeignet gewahlt. Das M-file STOICH kann benutzt werden, um die stochiometrischen Gleichungen in Anlehnung an die ubliche chemische Formelsprache zu erzeugen.
+
3.1.2
Stochiometrische Gleichungen aus der stochiometrischen Matrix chemischer Reaktionen
Wic schon angcdeutet, sagen die stochiomctrischen Gleichungen nichts dariibcr aus, welchc chemischen Reaktioncn in dcm Komponentcngemisch tatsachlich ablaufen. Das ist keine Rage der lincarcn Algebra, sondern dcr Chcmic. Ob also die Synthesegascrzeugung ubcr die bcidcn Reaktionsschrittc vcrlauft, dic durch die Gln. (3.22) und (3.23) angezeigt wcrden, stcht dahin. Besondcrs die zweite Gleichung wird eincm Chemiker suspekt sein, wahrcnd die crstc durchaus auch cine Reaktionsgleichung sein konntc. Es ist wohl gesichert, dal3 an dcr Synthcsegaserzcugung dic beidcn folgcndcn Rcaktioncn bcteiligt sind:
+ 3H2
(3.24)
+ H20 F! C02 + H2
(3.25)
CH4 + H20 S CO
CO
Daruber hinaus konntc man noch diskutiercn, ob nicht gleichzcitig auch eine Umsetzung von CH4 direkt zu CO2 stattfindet:
(3.26) Als stochiomctrische Bezichung ist diese dritte Rcaktionsgleichung rcdundant, als chemischer Schritt diskussionswurdig - und im ubrigen gar nicht so lcicht zwingcnd nachzuwcisen. Es wird in der Chemie haufig vorkommen, dafl aus chcmisch-kinetischcn Untcrsuchungen cin Reaktionsablauf (,,Reaktionsmcchanismus") postulicrt wird und erst im nachhinein die Rage auftaucht, wclchen stochiomctrischcn Gleichungcn die Rcaktionen genugen mussen. Besonders bei umfangreichen, intuitiv aufgestellten Reaktionsmcchanismen ist es gar nicht sclbstverstandlich, dal3 das Rcaktionsschcma auch eincn vollstandigen Satz stochiomctrischer Glcichungcn enthalt. ( ,,Rcaktionsmechanismus '' oder ,,Reaktionsschcma " wird hicr vcrwendet im Sinne von Brutto-Reaktioncn wie die Gln. (3.24), (3.25) und (3.26) oder von Elementarrcaktionen wic das wcitcr unten stehendc Schcma der H2Vcrbrennung.) Die Ableitung cines ausreichendcn Satzes stochiomctrischcr Glcichungen erfolgt am bcstcn aus dcm Reaktionsmechanismus, da man damit eine
3.1 Stircbiometrische Gleichungen (Lineare Algebra) 35
Uberprufung auf stochiometrische Vollsttindigkeit verbinden kann. Im Sinne der linearen Algebra mui3 ein Uberbestimmtes Gleichungssystem gelost werden, denn die Anzahl der chemischen Reaktionen wird die Anzahl der beteiligten Komponenten meistens libertreffen. Von den chemisch wichtigen Reaktionen des Mechanismus sind mit anderen Worten eine Anzahl linear von den anderen abhtingig. Wiederum ist die Reduzierung des (diesmal ilberbestimmten) Gleichungssystems auf die gestaffelte Form ein gut geeignetes Losungsverfahren. Es ist in dem File STOICH2 enthalten, das im Hauptteil chemische Gleichungen erzeugt, zunachst den Reaktionsmechanismus zur Kontrolle der Reaktionsmatrix, und dann einen vollsttindigen Satz stochiometrischer Gleichungen. Sollte der Reaktionsmechanismus stochiometrisch unvollsttindig sein, enthtilt die reduzierte gestaffelte Form nicht die Einheitsmatrix als linke Teilmatrix. STOICH2 %Das Skript-File stoich2 gibt Reaktionsgleichungen aus, die in der Workspace durch die Reaktionsmatrix NR und den Komponenten-String-Vektor Sp definiert wurden. Dann gibt stoich2 einen Satz unabhaengiger stoechiometrischer Gleichungen aus. Die Schluesselkomponenten muessen die ersten in Sp sein. Beispiel fuer Sp und NR: Sp=(’CO CH4 H2 H 2 0 CO2’]; NR=[-1 -1 Oil 0 1;-3 1- 4 ; l -12;O 1-11; Die Arbeitsweise von STOICH2 entspricht der von STOICH im Abschnitt 3.1.1.%
Das Beispiel fur Sp und NR ist nichts anderes als der aus drei Reaktionen bestehende Reaktionsmechanismus der Synthesegasreaktion. Wir untersuchen jetzt einen etwas komplizierteren Mechanismus, der die Verbrennung von Wasserstoff beschreibt. Die Reaktionsmatrix RN ist in dem File H20 enthalten: h20; RN
RN
=
11-1 0 -10 0 0 10-1 0 01 0 0 -20 1 0 -10 0 I -10 1 - 1 -10 0-1 0 1 0-1 0 0 0-1 -11 0 0 0 0 0 0 -11 0-1
0 0-1 0 0 1 1 - 1 0-1 1 0 0 1-2 0 0 0 0 0 0 0 0-1 0 0 0 1 0 0 2 0 0 0-1 1 0-1 1 1 0 0-1 0 0-2 0 1 0 1 0 0
36 3 Sttrchiometrie, Therrnodynamik, Reaktionskinetik: Drei Saulen der CRT 0-2 1 0 0 0 0 1 0 - 2 1 1 - 1 0 0 0 0-1 0 1 0 0 0 1-1-1 1 0 1 0 1-1 0-1
00 00 -10 -11
1 0 0 0 0 0
STOICH2 wird jetzt das Reaktionsschema und einen stochiometrischen Minimalsatz ausgeben; zuvor muB die Reaktionsmatrix noch transponicrt werden:
NR=RN'; stoich2
Reaktionen
H2 + OH <===>H + H20 H + 02 <===> 0 + OH H2 + 0 <===> H + OH 2 OH <===> H20 + 0 2 H <===> H2 H + 02 <===> H02 H + H02 <===> H2 + 02 H + H02 <===> 2 OH H02 + OH <===> H20 + 02 H02 + 0 <===>OH + 02 H + OH <===> H20 2 0 <===>02 H + H02 <===> H20 + 0 2 H02 <===>H202 + 02 2 OH <===>H202 H + H202 <===>H2 + H02 H + H202 <===>H20 + OH H202 + 0 <===> H02 + OH H202 + OH <===> H20 + H02 Stoechiometrische Gleichungen OH = H + 0.5 02 2 OH = H20 + 0.5 02
2 OH = H2 + 02 OH + 0.5 02 = H02 2 OH = H202 0.5 02 = 0 Aus der Reaktionsmatrix wird also das Gleichungssystem der chemischcn Reaktionen, der ,,Mechanismus", wieder richtig gebildet. Das stochiometrische (Minimal-)Gleichungssystem entspricht ebenfalls unseren Erwartungen: Die Anzahl der Gleichungen ist sechs, gleich der Differenz zwischen der Anzahl der
3.1 Stdchiometrische Gleichungen [Lineare Algebra)
37
Komponenten und der Anzahl der Elemente; die sechs Schlusselkomponenten H, H 2 0 , Ha, H 0 2 , H202 und 0 treten nur je einmal auf. Wir konnen uns noch die gestdelte Form der Reaktionsmatrix ausgeben lassen, was aus Platzgriinden in Teilmatrizen geschieht: h 20 R=rref( RN); size(R) ans =
19 8 rank(RN) ans =
6
Die erste der Teilmatrizen ist die Matrix R(1:6,1:6),die Matrix mit den st6chiometrischen Koeffizienten der Schliisselkomponenten; sic mufl die Einheitsmatrix sein:
R( 1:6,1:6) ans =
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
Die zweite Teilmatrix zeigt die Koeffizienten der Nichtschliisselkomponenten:
R( 1:6,7 :8) ans = -1.0000 0.5000 -2.0000 -2.0000
0.5000
1.0000
-1.0000 -0.5000 -2.0000 0 0 -0.5000
Die dritte Teilmatrix darf nur Nullen enthaltcn: R(7: 19,:) ans = 0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
38 3 Sttrchiometrie, Thermodynamik, Reaktionskinetik: Drei Saulen der CRT 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Die Ausgabe so vieler Nullen nur zur Kontrolle der gestaffelten Form kann vcrmiedcn werden: find findet in einer Matrix alle von Null verschiedcnen Eintrage: [i,j]=find( R(7:19,:)) i =
[I j =
[I Die Vektoren i und j sind lcer, es gibt also keinen von Null vcrschiedencn Eintrag.
3.1.3
Beispiel: Katalytische Dampfspaltung von Methan zu Synthesegas
In diesem Abschnitt wird ein realistischcs Problem vorgestellt und angegangen. Es behandelt die Frage, ob sich in cinem Rcaktor Gleichgcwicht eingestcllt hat; eine solche R a g e kann gleichermaaen bci einem technischen ProzcB wie fur cincn Versuchsreaktor im Labor oder im Technikum auftauchen. Bctrachten wir das Verfahrensschema in Abb. 3.1: Mcthan wird iibcr einen Stromungsregler einer Druckflasche entnommen und durch einen Wasserdampfstittiger geleitet. Dort stellt sich ein Wasscrdampf/Mcthan-Gemisch mit vorgeschriebenem Verhaltnis und Gesamtdruck ein, das in einem isothermen Fcstbcttreaktor bci 850 "C an einem Katalysator zu Synthescgas umgesctzt wird. Das Produktgemisch wird bis zur vollstandigen Wasscrabscheidung gekuhlt und das trockene Gas auf CH4, CO und CO:! analysiert. Um das Problem noch etwas realistischcr zu machcn, lassen sich Versuchc dcr beschriebencn Art mit einem SIMULINK-Modell simulieren, das, wie man in Abb. 3.2 sieht, ahnlich wie cin FlieDbild ciner Versuchsanlage konfiguricrt werden kann; daruber hinaus kann man im SIMULINK-Fcnster zumindcst in crster Naherung cine Mei3warte darstellcn (s. weitcr untcn). Beim Betricb dicscs Anlagenmodells cntstehen zwangslaufig Tcilproblemc wie die Fragc, wclchc Tcmperatur in dcm Wasserdampfsgttiger einzustellcn sei, um bei vorgcgebcncm Gesamtdruck ein bcstimmtes HzO/CH4-Vcrhaltnis zu erreichen. Auch kann die begrcnzte McDgcnauigkeit durch einen Zufallsfehler in dcr Produktanalysc
3.1 Stachiometrische Gleichungen [Lineare Algebra)
39
d Abbildung 3.1: Versuchsanlage zur Dampfspaltung von Methan. a Nlethan-Vorrat, b Wasserdampf-Stittiger, c Festbettreaktor, d Wasserabscheider. MSR-Symbole: F Stromung (flow),P Druck (pressure), Q Eigenschaft (quality) , T Tempcratur (temperature), I Anzeige (indication), C Regelung (control), R Registrierung (registration). beriicksichtigt werden, auf den sich die Beantwortung der Hauptfrage (Gleichgcwicht) einzustellen hat. Die Gleichgewichtsberechnung ist Gegenstand von Abschnitt 3.2. Hier werden zuntichst zwei iiberwiegend stochiometrische Aufgabcn behandelt, die in den Problemen 3.4.6 und 3.4.7 formuliert sind. Wenn Sie mit dem SIMULINK-Model1arbeiten wollen, konnen Sie wie folgt vorgehen: Laden im MATLAB-Fenster: E X P U N I T 2 ; es erscheinen vier Fenster: die Gesamtanlage, der Zustrom, die Ausgabe und die T- und p-Regelung des Reaktors. 0
Der Info-Block in der Gesamtanlage sagt Ihnen, was Sic vor dem Simulationsstart tun miissen. Die roten, mit Schatten unterlegten Blockc in den Fenstern sind fiir Einund Ausgabe von Werten gedacht: Der Zustrom von CH4 steht auf 2 Ncm3/s oder 2/22400*1e-3 kmol/s; Sie konnen ihn unmittelbar im Constant-Block oder mit dem Slider- Gain-Block vergndern, ebenso die Temperatur T(H20) des Sattigers. Die Reaktortemperatur kann im Fenster ,,Reaktor T,p-control" am Constant-Block ,,temp, "C" eingestellt werden, der Druck wie gesagt im MATLABFenster (stets gefolgt vom Aufruf SYNGADAT!).
40
3 Sttlchiornetrie, Therrnodynamik, Reaktionskinetik: Drei Sgulen der CRT
Werte werden in den Display-Blocken ausgegeben, dic Analysencrgcbnisse auch im MATLAB-Fenster; zusgtzlich werdcn Wertc uber die To- Worlcspace, und die Tcmperatur dcs Blockc regzstratzon gespeichert, in NNT N c H ~NH*O Sattigcrs (in K), in x-obs die gemcssenen prozentualen Molanteile 5 C H ~ zco2 , und
-------A Analyse
d r l
Abbildung 3.2: Versuchsanlage (SIMULINK-Modell).
3.2
Thermodynamische Gleichgewichte (Nichtlineare AGls)
Wahrend die Stochiometrie in den mcistcn Lchrbuchern der Physikalischcn C h c mic und in vielen Lehrbuchern dcr CRT nicht angcmcssen bchandelt wird (empfchlenswerte Ausnahmcn (41 und (51), sieht das bei dcr Thermodynamik andcrs aus. Wir konnen daher die Grundlagen voraussetzen und uns im wcscntlichen darauf bcschrtinken, cinige Moglichkeitcn von MATLAB bei dcr Bercchnung chemischer Gleichgewichte vorzustellen. Die engc Vcrbindung mit dcr Stochiometrie wird dabci deutlich werden; hinzu kommt die Losung nichtlinearcr Gicichungssysteme. Phasengleichgewichte wird man mit MATLAB wohl nur fur den Hausgebrauch odcr in besondcren Fallen angehen, z. B. im Zusammenhang mit der Kinetik oder mit Glcichgcwichten chcmischer Reaktioncn.
3.2 Thermodynamische Gleichgewichte (Nichtlineare AGls)
41
Die thermodynamische Gleichgewichtskonstante K fiir eine Reaktion Cu,A, = 0 kann man aus den Groaen AH:(298), AGOf(298) und C,(T) fiir die einzelnen Komponenten berechnen, deren Werte in vielen Tabellenwerken und Datenbanken vorhanden sind, die Cp-Werte uber einen entsprechend weiten Temperaturbereich, meistens in Form eines Polynoms Cp(T) = a+ bT +cT2 ... Mit diesen Informationen kann man die freie Standard-Reaktionsenthalpie AGO fur jede Temperatur berechnen innerhalb des Gilltigkeitsbereichs der Cp-Werte und daraus die Gleichgewichtskonstante nach
+
K = exp( -AGO/( RT))
(3.27)
Man kann wie folgt vorgehen (wir lassen im folgenden den oberen Index 0 zur Bczeichnung des Standardzustands weg): Aus
AH(T) = AH(0)
+
LT
ACpdT
(3.28)
+ AcT2 + ...
(3.29)
mit ACp = Aa + AbT
(wobei wie iiblich Ax = Cv,zi bedeutet) e r h a t man A H = AH(0) + AaT
+ 1/2 AbT2 + 1/3AcT3 + ...
(3.30)
(Es sci angemerkt: Da die Beziehungen fiir die T-Abhiingigkeit der Cp-Werte gewohnlich nicht bis zum absoluten Nullpunkt giiltig sind, ist AH(0) ein fiktiver Wert und nicht die wirkliche Enthalpieiinderung bei T = 0. Wenn aber AH(0) nur benutzt wird, um AH(T) in Bereichen zu berechnen, in denen Cp(T)giiltig ist, wird kein Fehler erzeugt.) Wir substituieren den Ausdruck fiir A H in die bekannte Gibbs-HelmholtzGleichung
(3.31) und erhalten 1 AG = AH(0) - A a T l n ( T ) - - AbT2 - 1 /6 Ac T 3 + ...+IT 2
(3.32)
wobei I eine Integrationskonstante ist. Aus dieser Gleichung kbnnen wir nun die freie Standard-Reaktionsenthalpie berechnen, wenn - das sei zur Wiederholung noch einmal angefiihrt -
42
3 St(lchiometrie, Thermodynamik, Reaktionskinetik: Drei StiuJen der CRT die C,-Wertc aller Komponenten bckannt sind bis zur Rcaktionstcmpcratur die Reaktionsenthalpie fur wenigstcns cinc Tcmperatur (gcwohnlich fur 298 K) bekannt ist, so dai3 A H ( 0 ) berechnet werden kann dic freie Rcaktionsenthalpie fur wenigstens eine Temperatur (gewohnlich fur 298 K) bekannt ist, so dafi die Intcgrationskonstantc I bercchnct werdcn kann.
Wcrte fur die thermodynamischen Groi3cn wird man Tabellcnwcrkcn oder heute mehr und mehr Datenbankcn entnchmen. Die R a g e ist, wic man sic am bequemsten in MATLAB einbinden kann. Man konntc durchaus daran denken, cinc Stoffdatenbank in MATLAB zu intcgricren. Jede Datenbank ist dafilr g c cignet, die man in FORTRAN oder in C/C++ ansprechcn kann; im Application Program Interface ( A P I ) Guide ist beschrieben, wic in MATLAB Vcrbindungen zu Programmen in diesen Sprachen hergestcllt werdcn konnen. Ein solcher Wcg wird aber die Flexibilitiit von MATLAB in ahnlicher Weise einschranken, wic das aus Softwarepaketen mit integricrten Datenbanken bckannt ist, und gcradc solche Einschriinkungen sind bci dcn Aufgaben hindcrlich, dic im crstcn Kapitcl und im Vorwort dieses Buches fur MATLAB abgesteckt wordcn sind. Einfacherc Mcthoden, Datcn in MATLAB-Rcchnungen cinzubindcn, durftcn in vielen Fiillcn vom Anwcndcr genutzt werdcn konncn: durch drag and drop aus dcm Netz, uber die Database Toolbox oder aus Sammlungen auf CD Bei den Problemen im Abschnitt 3.4 findet man Aufgaben zur Gleichgc wichtsberechnung im Zusammcnhang mit der Dampfspaltung von Methan zu Synthesegas. Gleichgcwichtsberechnungcn crfolgen dort ubcr die Losung von nichtlinearen algebraischen Glcichungen, was bci hoherdimensionalcn Siniultanglcichgewichtcn zu Konvergenzschwicrigkeitcn fuhren kann. Ein wcnig a n g c wandtcr, aber gutcr Ausweg ist, fur die fraglichcn Reaktioncn cinc Massenwirkungskinctik zu formuliercn und in DGls odcr DAGls fur Rcaktorbcrechnungcn einzufugen; dann kann man sich dem Glcichgewicht von ciner mchr odcr weniger willkiirlichen Ausgangszusammensetzung hcr so nahcrn, wie cs sich in cincm Rcaktor bei genilgcnd groficr Verweilzeit einstcllt; man ist nicht wic bci der Losung von nichtlinearen AGls darauf angcwicsen, Schatzwertc fur die Gleichgcwichtszusammensetzung angeben zu miissen und dabei Gefahr zu laufen, den
'.
'
Frilher wurde in der Arbeit.sgruppe dcs Autors niit, eincm Daten-Filc irn ASCII-Format, gearbeitet, das aus den1 Buch von Rcid ct. al. [6] ilbcrtragcn worden war. Gcgcniibcr dcni Nctz hat d:is den Vortcil stnndiger rind ringestOrtcr Verftigl);irkeit, uiid cs cntstehen kciiic Kost,cm; aiich ticim Verglcich niit, Datciibaiiken auf C D niiiL3 inim iiat.f.irlich dcrcn Preiso bct,rtu:litcii. Als dcr Einsatz voii MATLAB unifangreicher wurdc und ncben thc!rrnodyiianlischoll Gr6fic:n auch rnehr Transport,grOOcn, wic Diffusioiiskocffizicntcii usw., benntigt wurdcn, wurdc eiiic CRT-Datcii-Toolbox ftlr MATLAB ent,wickelt; sie eiitli:llt, - au8er den schoii erwXhnteii St,offd a t e n viele NBherungsverfahren und SchXtznicthodcn aris [6] nls hIATLAB-Prograiiimc!, die daher besonders eiiifach und effizicnt in MATLAB-Programme einzirbiriden sind; m a n knrin sic a b e r auch Uber eine zweckinBf3ige BedieneroherflRche (GUI) ansprechen, die ebenfalls i n MATLAB geschrieben ist. Bei Bedarf kann inan dcr Toolbox lcicht ncue Datcii odcr Progrwinmc! hirizufilgen.
3.3 Reaktionskinetik (Gewohnliche, auch steife DGls; DAGls) 43
Konvergcnzradius des Losungsverfahrens zu verfehlen. Ein Beispiel, ebenfalls fur die Dampfspaltung von Methan, folgt spater im Abschnitt 5.5. Selbstverstandlich lai3 sich auch bei Berechnungen zum realen Verhalten von Stoffen odcr Stoffgemischen MATLAB mit Vorteil einsetzen. Die ublichen Ansatzc wic Zustandsgleichungen (z. B. Soave-Redlich-Kwong) oder Exzei3groi3en (UNIQUAC- Ansatz) erfordern aber kaum besondere Rechenmethoden, wenn dcr Rechenaufwand auch erheblich sein kann. So beschranken wir uns auf ein Beispiel in Form eines Problems, bei dem die Molwiirme eines realen Gases mit Hilfe einer Zustandsgleichung berechnet werden soll; dieses Beispiel soll zeigen, wie man mit Hilfe der Symbolic Math Toolbox umfangreichere Rechnungen fiir reale Systeme bequem bewaltigen kann.
3.3
Reaktionskinetik (Gewohnliche, auch steife DGls; DAGls)
In diesem Abschnitt wird zuntichst ein kurzer Abrii? formaler Beziehungen in der Reaktionskinetik gegeben. Die Darstellung orientiert sich im wesentlichen an Boudart [7]. Das schafft die Grundlage, um die Behandlung komplexer Reaktionssysteme mit den Hilfsmitteln von MATLAB und SIMULINK anzugehen. Wir wcrden dem iiblichen Weg folgen und die kinetischen Gleichungen fur ein gcschlossencs System formulieren, also in die Form $ = f(c) bringen, und dann sehen, wie wir solche DG1-Systeme losen konnen. Dabei werden wir genauer unterscheiden lernen, was kinetische Gesetze (Geschwindigkeitsgleichungen)und was Bilanzgleichungen sind, und nicht den Fehler begehen, diese beiden Begriffe sorglos zu mischen. Das wird es uns erleichtern, auch fur offene Systeme, sprich: fur kontinuierlich betriebene Reaktoren, Bilanzgleichungen aufzustellen und kinetische Gesetze einzubetten. Wir werden uns mit anderen Worten zunachst mit der Losung der Bilanzgleichungen fur Batch-Reaktoren beschaftigen, und dabei die weitere Einschrankung machen, dai3 das Reaktionsvolumen konstant bleibt. Nur dann trifft die oben angegebene ubliche Formulierung des DG1-Systems zu. Die kinetischen Koeffizienten setzen wir dabei als bekannt voraus. Die Rage, woher wir diese Koeffizienten bekommen, eine der entscheidenden F'ragen der CRT, verschieben wir auf Kapitel7; urn diese Probleme realistisch angehen zu konnen, miissen wir in den folgenden Kapiteln erst mehr uber Reaktoren und uber 'Ikansportprozesse erfahren.
3.3.1 Wichtige reaktionskinetische Grijf3en
und Beziehungen Wir betrachten zunachst irreversible Reaktionen. Die Geschwindigkeit T (von rate) einer chemischen Reaktion ist eine Funktion der Temperatur und der Konzentrationen aller Reaktionskomponenten:
44 3 Sttlchiometrie, Thermodynamik, Reaktionskinetik: Drei Siiulen der CRT
r = r ( c ,2')
(3.33)
Merke: Eine Geschwindigkeitsgleichung (ein kinetisches Gesetz) ist eine algebraische Gleichung, keine Differentialgleichung! In vielen Fallen kann man die allgemeine Form aufspalten in das Produkt zweier Terme, von denen der eine nur von der Temperatur abhangt, der andere nur vom Konzentrationsvektor:
r = k ( T ) . f(c)
(3.34)
k(T) folgt i. a. dem Arrhenius-Gesetz: k = kaexp(-E/(RT)). f ( c ) wiederum lafit sich haufig darstellen als ein Potenzprodukt der ci (,,Potenzgesetz"): f ( c )= n c p -
(3.35)
ni heifit die Reaktionsordnung bezuglich der Komponente i. Nur wenn es sich bei der Reaktion um eine Elementarreaktion handelt, mui3 fur Edukte ni gleich lv,I sein, fur die anderen Komponenten gleich Null. Man spricht dann in Anlehnung an das Gesetz von Guldberg und Wage von einer ,,Massenwirkungskinetik '0 ein Begriff, der gegebenenfalls auch auf Nicht-Elementarreaktionen angewendet wird. Bei reversiblen Reaktionen kann man fur Hin- und Riickreaktion jeweils eine Geschwindigkeitsgleichung ansetzen, ? und 7 ,und zu einer Netto-Reaktionsgeschwindigkeit zusammensetzen:
r=T-f
(3.36)
Wenn fiir 7 und 7 eine Gleichung der Form 3.34 zutrifft, gilt im Gleichgewicht
-z
+- K" k
(3.37)
Nur bei Elementarreaktionen mui3 12 = 1 sein. Bei Brutto-Reaktionen wird haufig ebenfalls mit n = 1 gerechnet; das sollte aber nicht unreflektiert geschehen. Man mufi sicher sein, dafi die Geschwindigkeitsgleichungenfur Hinund Ruckreaktion im Gleichgewicht auch zutreffen. Da sie meistens experimentell weit weg vom Gleichgewicht ermittelt werden, ist das nicht von vornherein gegeben. Wenn eine Reaktion in einem geschlossenen System ablauft, in der Sprache der CRT in einem Batch-Reaktor, gilt fur jede Komponente i die Stofiilanz
3.3 Reaktionskinetik (Gew&hnfiche, auch steife DGls; DAGls)
dni _ - virv
dt oder, wenn das Reaktionsvolumen konstant bleibt,
45
(3.38)
(3.39) Eine solche Bilanzgleichung wird gerne als Geschwindigkeitsgleichung ausgegeben oder mit der Definition der Reaktionsgeschwindigkeitverwechselt. Wie die Erfahrung lehrt , erschweren es solche unzuliissigen Verallgemeinerungen vielen Chemie-Studierenden, offene Systeme zu verstehen, im Rahmen der CRT also kontinuierliche Reaktoren.
3.3.2
Komplexe Reaktionssysteme (DGls)
Unter komplexen Reaktionssystemen wollen wir Mehrfachreaktiopen verstehen, die in der einen oder anderen Hinsicht sich nicht trivial verhalten. Wir beginnen aber mit trivialen Systemen. In den vorhergehenden Abschnitten haben wir schon kleinere und grtiflere Systeme von Mehrfachreaktionen und ihre stochiometrische Behandlung kennengelernt. Wir ktinnen ein Reaktionssystem allein durch die (sttichiometrische) Reaktionsmatrix NR darstellen; die Komponenten zahlen dann von 1 bis N . Wenn wir die Komponenten mit ihren chemischen Formeln bezeichnen mochten, konnen wir einen Komponenten- oder Speziesvektor Sp verwenden. Wir werden spater sehen, wie man die Reaktionsmatrix und den Speziesvektor aus den ublichen chemischen Reaktionsgleichungen bequem ableiten kann, wenn man sich einmal die Miihe gemacht hat, ein entsprechendes Programm zu schreiben. Man wird aber auf diese Methoden erst zuruckgreifen, wenn man es wirklich mit grofleren Reaktionssystemen zu tun bekommt wie im nachsten Abschnitt. Filr die ublichen Reaktionstypen der CRT brauchen wir sie noch nicht. Zu solchen Reaktionstypen zahlt die nachstehend behandelte Folgereaktion, an der wir verschiedenen Losungsmtiglichkeiten studieren werden. Wir wollen die Konzentrations-Zeit-Kurven einer (1,l)-Folgereaktion im BR B -+ C. Die Geschwindigkeitskonstanten seien kl = 2 sowie berechnen: A a) k2 = 1,b) k2 = 10000; die Anfangskonzentration von A sei c i = 1, die anderen beiden Anfangskonzentrationen Null. (Die Einheiten sind hier unerheblich, solange sie konsistent sind.) Die Bilanzgleichungen fur den Batch-Reaktor mit konstantem Reaktionsvolumen, den wir in diesem Abschnitt ausschliefllich betrachten wollen, lauten: --f
(3.40a) (3.40b) ‘A
+ cB + C C
=
(CA
+ C B + cC)O
(3.40~)
46
3 Stdchiornetrie, Therrnodynarnik, Reaktionskinetik: Drei Stiulen der CRT
wobei der letzte Term eine Kurznotierung fur die Summe der Anfangskonzentrationen ist. Das DG1-System wird noch erganzt mit den Anfangsbedingungen
t=O:
ca=c;
(3.41)
mit i = A , B , C. Wir werden sehen, dai3 dieses triviale System auch nichttriviale Ziige annehmen kann, je nach dem Verhaltnis der Geschwindigkeitskonstanten kl und k2. Dieses DG1-System ist analytisch losbar. Wir werden es numerisch losen und dann mit der symbolisch-analytischen Losung vergleichen.
3.3.2.1
Analytische Losung
Zunachst die symbolische Losung, also die analytische Losung mit Hilfe der symbolischen Mathematik; wir verwenden MAPLE, das in Form einer Symbolic Math Toolbox als Zusatz zur professionellen Version von MATLAB erhaltlich ist; in der SE'ist sie schon integriert. gl l='Da=-kl*a';gl2='Db=kl*a-k2*b'; (ca,cb]=dsolve(gll,g12,'a(O)=a0','b(O)=O') ca = exp(-kl*t)*aO cb =
-kl*(-exp(-k2*t)+exp(-kl*t))/(kl-k2)*aO
cb kiinnen wir noch etwas ubersichtlicher darstellen: pretty (c b)
kl (-exp(-k2 t) + exp(-kl t)) a0
- __-____------__-----------------
kl - k2
Wir konnen uns den zeitlichen Verlauf der Konzentrationen fur bestimmte Werte der Parameter leicht plotten lassen (Abb. 3.3): a0=1; kl=2; k2=1; t=0:0.1:5; plot(t ,eval( ca), t ,eval( c b),t , 1-eval(ca)-eval( c b)) xlabel('Zeit t') yla bel(' Konzentration')
3.3.2.2
Numerische Losung
Fall a) Nun zur numerischen Losung, die hier naturlich nur eine Fingerubung ist. MATLAB bietet verschiedene DGL-Loser, die im Handbuch naher beschrieben sind; sie verlangen im einfachsten Fall ein function M-,file, das die DGls in der MATLAB-Sprache formuliert. Das ist hier im File F O L G E ~- 1 geschehen.
3.3 Reaktionskinetik (Gewuhnliche, auch steife DGis; DAGls) 47
Abbildung 3.3: Konzentrations-Zeit-Kurven einer (1,l)-Folgereaktion (kl=2, k2= 1). - (A), - - (B), . . . (C). FOLGE~ 1 function dy = folgel-l(t,y) global k l k2 A0 dy( l)=-kl*y( 1); dy(2)=kl*y(l) - k2*y(2);
dy=dy';
Die Transponierung in der letzten Zeile wurde im Hinblick auf den weiter unten eingesetzten DG1-Loser odef 5s gemacht, der einen Spaltenvektor verlangt. Wir ubergeben die Parameter k l , k2 und A0 iiber eine global-Anweisung und rufen dann ode45 auf (Der Befehl help ode45 im MATLAB-Fenster oder im Notebook ruft erkltirenden Text auf.): global k l k2 A0 k l = 2 ; k2=1;AO=1; [tn ,yn]=ode45( 'folgel -1',[0,5], [A0 01); subplot( 1,2,1) plot(tn,yn) xlabel('2eit t ' ) yla bel( 'Konzentration') subplot( 1,2,2)
48
3 Sttlchiometrie, Thermodynamik, Reaktionskinetik: Drei Saden der CRT plot (t,eval (ca), t ,eval( c b)) xlabel('Zeit t') ylabel ('Konzentration')
Abbildung 3.4: Konzentrations-Zeit-Kurven der (1,l)-Folgereaktion (kl=2, k2=1). Linkes Teilbild: numerische Losung. Rechtes Teilbild symbolisch-analytische Losung. - (A), - - (B).
Wenn wir die symbolische und die numerische Losung in einem Diagramm ausgeben (Abb. 3.4), kijnnen wir die Kurven im Rahmen der Zeichengenauigkeit nicht voneinander unterscheiden. Wir konnen aber ihre Differenzen plotten (Abb. 3.5). Dazu miissen allerdings die Vektoren auf gleiche Groi3e gebracht werden. Das geht mit dem Befehl interpl: yi=interpl(tn,yn,t,'spline'); . yI=yI ; cae=eval(ca);cbe=evaI(cb); plot (t,(yi( 1,:)-cae)./cae*100, t,(yi( 2,:)-cbe) ./c be* 100) xlabel ('Zeit t');ylabel(' Konzentrationsdifferenz in %'); .t
Warning:
Divide by zero.
Der prozentuale Fehler erreicht also erst bei sehr kleinen Konzentrationen nahe Null Werte uber 0.05 %, also in Bereichen, die nicht mehr zahlen. Die Warnung zur Division durch Null kijnnen wir ignorieren; es wird kein Fehler erzeugt .
3.3 Reaktionskinetik (Gewtlhnliche, auch steife DGls; DAGls)
49
Fall b) Wenn wir eine numerische Losung fiir den Fall b), k2 = 10000, versuchen, macht vielleicht die lange Rechenzeit stutzig; wir ktjnnen sie mit tic und toe messen (in Sekunden): k2=10000; tic; [tn,yn]=ode45( 'folgel-l',[0,5] ,[A0 O]);toc elapsed-time = 69
Interessant sind auch die sehr kleinen Schrittweiten in der Zeit: size(tn) ans =
60277 1
Die Konzentrations-Zeit-Kurven fiir A und B (Abb. 3.6) zeigen zunachst nichts Ungewahnliches: Das Diagrammm sieht so Bus, wie wir es erwartet haben: Die Konzentration von A ftillt exponentiell ab, wahrend B im Rahmen der Zeichengenauigkeit Null ist, auf jeden Fall sehr klein und quasi-station&-. Bleibt die F'rage, warum die Losung so lange gedauert hat. Nehmen wir einen detaillierteren Blick auf den Verlauf von B (Abb. 3.7): Der gezoomte Ausschnitt zeigt deutlich, warum die numerische Lijsung des steifen Systems so vie1 Zeit braucht: In Tausenden von unntitigen Zick-ZackSchritten steuert das Lasungsverfahren um die richtige (analytische) Losung herum. Wie man durch Variation der Toleranz (Standard: deutlich machen kann, geschieht das weniger, um die geforderte Genauigkeit einzuhalten, sondern um die Stabilitat sicherzustellen. DG1-Systeme, in denen so stark unterschiedliche Zeitkonstanten auftreten (l/lcl und l / k 2 ) , bezeichnet man als steif. Probieren wir odel5s (s fur s t z g ) fur das steife System: tic; [ts,ys]=odel5s('folgel -l', [0 51,[A0 O]);toc elapsed-time = 1.1000e-001 size(ts) ans =
63 1 subplot( 1,2,1) plot(ts,ys(: 2)) subplot( 1,2,2) plot (ts, YS( :12)) subplot( 1,2,2) zoom
In wenigen Schritten, innerhalb von einer Zehntelsekunde, produziert ode15s eine glatte Lasungskurve (Abb. 3.8).
50 3 Stdchiometrie, Thermodynamik, Reaktionskinetik: Drei SBulen der CRT
Abbildung 3.5: Prozentuale Differenz von numerischer und analytischer Losung der (1,l)-Folgereaktion. - (A), - - (B).
Abbildung 3.6: Konzentrations-Zeit-Kurven von A (-) Folgereaktion (kl=2, k2= 10000).
und B (- -) der (1,l)-
3.3 Reaktionskinetik (Gewohnliche, auch steife DGls; DAGls)
51
Abbildung 3.7: Konzentrations-Zeit-Kurve von B (gezoomt); (kl=2, k2=10000).
7.05-
7.04-
7.037.027.011, 0.52
,
\
0.525
Zeit t
Abbildung 3.8: Konzentrations-Zeit-Kurve von B (numerische Lbsung mit odel5s, im rechten Bild gezoomt).
52 3 Sttrchiometrie, Thermodynamik, Reaktionskinetik: Drei Saulen der CRT Man konnte nun argumentieren, dafi man bei einem steifen System ja nur das Bodensteinsche Stationaritiitsprinzip anzuwenden brauche, um die Losung fur die interessierenden Komponenten mit einfachen DG1-Losern zu erzeugen. Im vorliegenden Fall wiirden wir C B gleich Null setzen und nur den zeitlichen Verlauf von C A berechnen. Man darf aber nicht vorschnell von dem sehr einfachen Ubungsbeispiel zu falschen Schliissen kommen. Erstens andert sich bei nichtlinearen Systemen die Steifigkeit mit dem Reaktionsablauf, und man kann bei groi3eren Systemen oft nur schwierig oder gar nicht voraussagen, ob die Annahme quasistationiirer Verhiiltnisse iiber den ganzen Losungsverlauf gerechtfertigt ist. Zweitens fuhrt diese Annahme im allgemeinen Fall auf nichtlineare Gleichungen; in einem grbi3eren System mui3 dann bei jedem Schritt des DG1-Losers ein nichtlineares algebraisches Gleichungssystem gelost werden. Losungsmoglichkeiten fur ein einfaches System konnen beim Problem 3.4.15 ausprobiert werden. Zuniichst aber sollen weitere Moglichkeiten gezeigt werden, DGls mit MATLAB zu losen, genauer gesagt mit SIMULINK.
3.3.2.3
SIMULINK-Block-Model1
Abbildung 3.9 zeigt ein Blockschaltbild FOLGESYS fur die (1,l)-Folge. Der ,,DG1Loser'' ist der Integrator-Block. Er bildet aus dem Vektor der Ableitungen an seinem Eingang den Konzentrationsvektor. Der wird im Demuz-Block in seine Komponenten aufgespaltet, aus denen durch Multiplikation mit den Geschwindigkeitskonstanten in den Gain-Blocken und algebraische Summierung die rechten Seiten der beiden DGls fur A und B gebildet werden; diese werden im Mus-Block zum Eingangsvektor fur den Integrator zusammengefafit. Bei jedem Zeitschritt werden die Konzentrationswerte im ASCII-File yout abgelegt, das am Ende der Rechnung im Arbeitsspeicher (workspace) zur Verfugung steht. Der zeitliche Verlauf der Losung kann iiber einen Scope-Block online verfolgt werden. Wenn die Modell-Parameter gesetzt sind, konnen die Simulationsparameter eingestellt und die Simulation aus der SIMULINK-Ebene gestartet werden. Versuchen wir, das steife System mit der Runge-Kutta-Routine ode45 und Einstellungen zu lbsen, die in Abb. 3.10 zu sehen sind. Wir besetzen jetzt die Modellparameter, kl=2; k2=10000;AO=1;
und starten mit Start aus dem Menu Simulation im SIMULINK-Fenster; auf dem Rechner kiSnnen wir im Scope den Losungsverlauf verfolgen, im Buch miissen wir uns mit einem Schnappschui3 begnugen, hier mit dem Endbild in Abb. 3.11. Vielleicht etwas uberraschend ist die Rechenzeit um mehr als eine Groaenordnung kiirzer als bei dem MATLAB-Programm, Wir ktinnen das SIMULINKModel1 auch vom MATLAB-Fenster aus starten und dabei mit tic und toc wieder die Rechenzeit bestimmen:
3.3 Reaktionskinetik (Gewohnliche, auch steife DGls; DAGls)
Demux
Gain
53
~
-
Scope Abbildung 3.9: SIMULINK-Blockschaltbild fur die (1,l)-Folgereaktion.
Abbildung 3.10: Auswahl eines Integrationsverfahrens und ParameterEinstellung in SIMULINK.
54
3 Stochiometrie, Thermodynamik, Reaktionskinetik: Drei Sgulen der CRT
Abbildung 3.11: Scope-Fenster nach Ende des Rechenlaufs fur die (1,l)-Folge. tic; [ts,ys]=sim( 'folgesys',5);toc
elapsed-time = 1.4530e+000
Noch schneller rechnet der Steif-Loser odel5s: tic; [ts,ys]=sim( 'folgesys',5,simset( 'solver','odel5s'));toc elapsed-time =
9.4000e-002
Warum braucht ode45 mit dem SIMULINK-Model1 nur ca. 1.5 Sekunden, mit dem MATLAB-Programm fast 70 Sekunden? Die Antwort gibt der niichste Abschnitt. 3.3.2.4
SIMULINK-Model1 mit M-File S-Function
Wir schreiben das (1,l)-Folge-Model1 als S-Funktion, FOLGESF, und betten sie in das SIMULINK-Model1 FOLGESY2 ein: FOLGESF f unction [sys ,
xO] =folgesf (t,x, u,flag, k l ,k2,AO) k 1=2; k2= 10000;AO= 1; if abs(flag) == 1
sys( l)=-kl*x( 1); sys( 2)=kl*x( l)-k2*x( 2); elseif abs(flag) == 3
sys=x; elseif abs(flag) == 0 sys=[2 0 2 0 0 01;
3.3 Reaktionskinetik (Gewtihnliche, auch steife DGJs; DAGls)
55
xO=[AO 01; else sys=[]; end
Diese S-Funktion stammt noch aus der Zeit von SIMULINK 1.3, ist aber besonders einfach und daher zur Einfilhrung bestens geeignet . Wir versuchen es zunachst wieder mit ode@, dann mit odel5s, um den Vergleich rnit dem MATLAB-Programm zu haben: tic; [ts,ys]=sim(’folgesy2’ ,5);toc elapsed-time =
3.0812e+001
Mit ode45 ist die Rechenzeit also etwas kurzer als beim MATLAB-Programm, aber von der gleichen GroBenordnung; in der SE wird die maximale Feldgrir Be iiberschritten. odel5s arbeitet auch hier bedeutend schneller. Auf den Plot wird verzichtet, er bringt nichts Neues zu den bisherigen entsprechenden Abbildungen. Wir sehen jetzt: Es macht einen groBen Unterschied in den Rechenzeiten, ob das DG1-System als M-File bzw. als M-file S-function oder als SIMULINK-Blockschaltbild implementiert wird. Die M-Files werden vom MATLAB-Interpreter abgearbeitet; das SIMULINK-Blockschaltbild lauft letztlich als compiliertes C-Programm. Somit werden die qualitativen Ausfiihrungen im Kapitel 2 nun auch quantitativ unterlegt. Bleibt zu zeigen, dai3 C MEX-file S-functions ahnlich schnell wie SIMULINK-Blockschaltbilder sind. 3.3.2.5
SIMULINK-Model1 rnit C MEX-File S-Function
Dazu schreiben wir die S-Funktion fur unsere (1,l)-Folge in C und iibersetzen sie mit dem batch-file m a , das wir zuvor ftir unseren Compiler und unseren Linker eingerichtet haben. Zungchst schreiben wir eine level 1 5’-function; level 1 bezieht sich auf die Syntax, die von den SIMULINK-Versionen 1 . 3 bis ~ 2.1 giiltig war und auch heute noch benutzt werden kann. Mit Version 2.2 wurde der level 2 eingefiihrt, dessen Syntax deutlich anders ist. Als Muster fiir die S-Funktion nehmen wir sfuntmpl. c aus dem Verzeichnis matlab\simulink\src sowie stspace. c aus demselben Verzeichnis (fiir level 1 aus den Verzeichnissen bis Version 2.1); stspace.c kann uns zeigen, wie man zusatzliche Parameter in eine C MEX-file S-function hineinbringt. Die wesentlichen Teile des Programms sind im folgenden ausgedruckt , die eigenen Eintrage hervorgehoben: F0LGE.C
I* * SFUNTMPL Template C S-function source file. * * Copyright ( c ) 1994 by The Mathworks, Inc. * All Rights Reserved
56 3 Sttlchiometrie, Thermodynamik, Reaktionskinetik: Drei Stiulen der CRT
*/ #define S-FUNCTION-NAME #include "simstruc. h"
folge
#define PAR ssGetArg(S,O) #define XO ssGetArg(S,l) static void mdlInitializeSizes(SimStruct *S) #define NSTATES mxGetN(X0) { ssSetNumContStates( S , NSTATES) ; /* number of continuous states */ ssSetNumDiscStates( S, 0); /* number of disCRTte states */ ssSetNumInputs( S,0); /* number of inputs */ ssSetNumOutputs( S,NSTATES) ; /* number of outputs */ ssSetDirectFeedThrough(S, 0); /* direct feedthrough flag */ ssSetNumSampleTimes( S, 1);/* number of sample times */ ssSetNumInputArgs( S, 2); /* number of input arguments */ ssSetNumRWork( S, 0); /* number of real work vector elements */ ssSetNumIWork( S, 0); /* number of integer work vector elements */ ssSetNumPWork( S,0); /* number of pointer work vector elements */
1
static void mdlInitializeConditions(doub1e *xO, SimStruct *S)
c int i, nstates; double *pr; nstates = ssGetNumCont States (S); pr = mxGetPr(X0); for (i = 0 ; i < nstates; i++){ *xO++ = *pr++;
}
1
static void mdlOutputs(doub1e *y, double *x, double *u, SimStruct *S, int tid)
{
int nOutputs = ssGetNumOutputs(S); int i;
/* * propagate */
the current integrator state to the output
for (i = 0; i < nOutputs; i++) *y++ = *x++;
static void mdlDerivatives(dx,x, u,
S,tid)
3.3 Reaktionskinetik (Gewohnliche, auch steife DGls; DAGls) 57
double *dx; double *x; double *u; SimStruct *S; int tid; { int i, j; double *apr; double k l , k2; apr = mxGetPr(PAR); kl=apr[O]; k2=apr [11; dx[O]=-kl*x[O]; dx[l]=kl*x[O]-k2*x[l];
1
#ifdef MATLAB-MEX-FILE /* Is this file being compiled as a MEX-file? */ #include ” simu1ink.c” /* MEX-file interface mechanism */ #else #include ”cg_sfun.h” /* Code generation registration function */ #endif Zum Vergleich folgt ein Level-2-Programm; zusiitzliche Moglichkeiten des level 2 sind aber nicht genutzt: FOLG E -S I M 2 .C
/* * sfuntmp1.c: C template for a level 2 S-function. Nicht fiir SE geeignet * * * I See matlabroot/simulink/src/sfuntmpl.docfor a more detailed template 1 * *
* Copyright (c) 1990-1998 by The Mathworks, Inc. * $Revision: */ /*
All Rights Reserved.
1.18 $
* You must specify the S-FUNCTION-NAME as the name of your S-function * (i.e. replace sfuntmpl with the name of your S-function). */
#define S-FUNCTION-NAME #define S-FUNCTION-LEVEL
/*
folge -sim2 2
58 3 Stuchiometrie, Thermodynamik, Reaktionskinetik: Drei StiuJcn der CRT
* Need to include simstruc.h for the definition of the SimStruct and * its associated macro definitions. */
#include ” simstruc. h ’ #define PAR(S) ssGetSFcnParam(S,O) #define XO( S) ssGetSFcnParam( S,l) /* Error handling
* * * You should use the following technique to report errors encountered within * an S-function: * * ssSetErrorStatus(S,”Error encountered due t o ...”); * return; * * Note that the 2nd argument to ssSetErrorStatus must he persistent memory. * It cannot be a local variable. For example the following will cause * unpredictable errors:
*
* mdlOutputs() * {
* char msg[256]; {ILLEGAL: to fix use ”static char msg[256];”} * sprintf(msg,”Error due to %s”, string); * ssSetErrorStatus(S,msg); * return;
*I * See matlabroot/simulink/src/sfunctmpl.docfor more details. */
/*====================* * S-function methods *
*______------__------* .................... / /* Function: mdlInitializeSizes ==================E=
* Abstract:
* The sizes information is used by Simulink to determine the S-function * block’s characteristics (number of inputs, outputs, states, etc.). */ static void mdlInitializeSizes( SimStruct * S) {
/* See sfuntmpl.doc for more details on the macros below */ ssSetNumSFcnParams(S, 2); /* Number of expected parameters */ if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { /* Return if number of expected != number of actual parameters return;
1
*/
3.3 Reaktionskinetik (Gew(lhnliche,auch steife DGls; DAGls)
ssSetNumContStates( S, 2); ssSetNumDiscStates(S, 0); if (!ssSetNumInputPorts(S, 0)) return; /*ssSetInputPortWidth(S, 0, 0);
ssSetInputPortDirectFeedThrough(S, 0, O ) ; * / if (!ssSetNumOutputPorts(S, 1))return; ssSetOutputPortWidth(S, 0, 2); ssSetNumSampleTimes(S, 1); ssSetNumRWork(S, 0); ssSetNumIWork(S, 0); ssSetNumPWork(S, 0); ssSetNumModes(S, 0); ssSetNumNonsampledZCs(S, 0); ssSetOptions( S, 0 );
1
/* Function: mdlInitializeSampleTimes ============== * Abstract: * This function is used to specify the sample time(s) for your
* S-function. You must register the same number of sample times as * specified in ssSetNumSampleTimes. */
static void mdlInitializeSampleTimes(SimStruct *S) { ssSetSampleTime(S, 0, CONTINUOUS-SAMPLE-TIME); ssSetOffsetTime(S, 0, 0.0);
}
#define MDL~INITIALIZE~CONDITIONS /* Change to #undef to remove function */ #if defined(MDL~INITIALIZE~CONDITI0NS) /* Function: mdlIniti&zeCon&ions =============== * Abstract: * In this function, you should initialize the continuous and disCRTte * states for your S-function block. The initial states are placed * in the state vector, ssGetContStates(S) or ssGetRealDiscStates(S). * You can also perform any other initialization activities that your * S-function may require. Note, this routine will be called at the * start of simulation and if it is present in an enabled subsystem * configured to reset states, it will be call when the enabled subsystem * restarts execution to reset the states.
*/
static void mdlInitializeConditions(SimStruct *S)
{ real-T *xO = ssGetContStates(S); real T *XO = mxGetPr(XO(S)); int -5 i;
59
60 3 StBchiometrie, Thermodynamik, Reaktionskinetik: Drei SAulen der CRT for (i=O;i
+
I
1
#endif /* MDL INITIALIZE~CONDITIONS*/ #define MDL-START /* Change to #undef to remove function #if defined (MDL-START) /* Function: mdlStart ============== * Abstract: * This function is called once at start of model execution. If you * have states that should be initialized once, this is the place * to do it.
*/
*/
static void mdlStart(SimStruct *S) {
1
#endif /* MDL-START */ / * Function: mdloutputs =========== * Abstract: * In this function, you compute the outputs of your S-function * block. Generally outputs are placed in the output vector, ssGetY(S).
*/
static void mdlOutputs(SimStruct *S,int-T tid) { real T *y = ssGetOutputPortRealSignal(S,O); rear-T *x = ssGetContStates(S);
/*
* propagate
the current integrator state to the output
*/
YPI
= xI0l;
Y [I1=411i
1
#define MDL-UPDATE /* Change to #undef to remove function */ #if defined(MDL-UPDATE) /* Function: mdlupdate ========== * Abstract: * This function is called once for every major integration time step. * DisCRTte states are typically updated here, but this function is useful * for performing any tasks that should only take place once per * integration step. *I
static void mdlUpdate(SimStruct *S, int-T tid)
{
1
#endif /* MDL-UPDATE */ #define MDL-DERIVATIVES
/* Change to #undef
to remove function
*/
3.3 Reaktionskinetik (Gewohnliche, auch steife DGls; DAGls)
61
#if defined(MDL-DERIVATIVES) /* Function: mdlDerivatives ======== * Abstract: * In this function, you compute the S-function block’s derivatives. * The derivatives are placed in the derivative vector, ssGetdX(S).
*/
static void mdlDerivatives(SimStruct *S)
real T *dx = ssGetdX(S); rear T *x = ssGetContStates(S); real-T *k = mxGetPr(PAR(S)); dx [O]=- k [01*x [01; dx [11=k [O]*X [O]-k [l]*X [11;
1
#endif /* MDL-DERIVATIVES */ /* Function: mdlTerminate ============== * Abstract: * In this function, you should perform any actions that are necessary * at the termination of a simulation. For example, if memory was * allocated in mdlInitializeConditions, this is the place to free it.
*/
static void mdlTerminate(SimStruct *S)
{
1
/*============================* * See sfuntmpl.doc for the optional S-function methods
* ._._._._._._._. _. _. _. _. _. _. _. _. _. ._ ._ ._._._._._.- .- _. -. _ _ _I *
*
..............................
* Required S-function trailer *
*_-_________________________-* ............................ / #ifdef MATLAB-MEX-FILE /* Is this file being compiled as a MEX-file? */ #include ”simulink.c” /* MEX-file interface mechanism */ #else #include ”cg_sfun.h” /* Code generation registration function #endif
*/
Es ist bei diesem sehr einfachen Beispiel also verhiiltnismid3ig leicht, durch Eintrage in das Muster sfuntmpl.~eine eigene S-Funktion zu erzeugen. Im Blockschaltbild FOLGESY2 ktinnen Sie sich nun iiberzeugen, daB die C MEX-file S-functions genausoschnell rechnen wie das Blockdiagramm FOLGESYS; in FOLGESY2 ktjnnen Sie im S-Function-Block den Namen der gewiinschten S-Funktion eintragen, also entweder FOLGE oder FOLGE-SIM2; vergessen Sie nicht die S-function parameters PAR (=[kl,k2]) und XO (=[AO,O])!
62 3 Stticbiometrie, Tbermodynamik, Reaktionskinetik: Drei Sauien der CRT 3.3.2.6
S I MULINK-Mode l1 m i t c ompilierter M-File S-Function
Wem das Programmieren in C nicht behagt, kann auf folgendem bequemen Weg ein schnelles Programm erzeugen - allerdings braucht man dazu eine weitere Toolbox, den MATLAB-Compiler. Ab Version 1.2 kann er aus function ,files M-file S-functions erzeugen, wenn auch mit gewissen Einschrankungen. Zu diesen Einschrankungen zahlt sein Unvermogen, Parameter auf anderem Wege als uber einen einzigen Eingang in einen S-Function-Block ZLI schleusen. Man mui3 also alle Variablen und Parameter zu einem Eingangsvektor zusammenfassen und den dann im Programm in die benotigten Bestandteile zerlegen - das erfordert bei groi3eren Programmen sorgfaltiges Buchhalten. Bei DGLs wird man so vorgehen, wie am Beispiel unserer (1,l)-Folge in Abb. 3.12 mit dem SIMULINK-Modell FOLGESY3.MDL und im Ausdruck der Datei FOLGE-SIM3 gezeigt ist: FOLGE-SIM3
function y = folge-sirn3(u) %k= u ( 1:2) ;x= u(3:4) ;
y (l)=-u( l ) * u (3); y( 2) =u(
l)*U(
3)-u( 2)*u (4) ;
y=y’;
Constant Mux
+
folge-sim3
---+-1
-
S
0 Scope Abbildung 3.12: SIMULINK-Model1 der (1,l)-Folge mit compilierter M-file S-function fur die DGLs.
Vor dem Start milssen wieder die beiden Parameter PAR (=[kl,k2]) und XO (=[AO,O]) besetzt werden. Man wird nicht erwarten, dafi die compilierte M-,file S-function die Schnelligkeit einer C MEX-file S-function erreicht; sie ist aber deutlich schneller als eine (nicht compilierte) M-file S-function. Wir haben nun genilgend Hilfsmittel kennengelernt, um uns an ein grooeres Reaktionssystem heranzuwagen. Die in der Kapiteluberschrift erwghnten
3.3 Reaktionskinetik (Gewohnliche, auch steife DGls; DAGls)
63
DAG1-S ysteme werden zunschst nur in einem einfachen Beispiel im Problem 3.4.15 vorgestellt, das mit konventionellen Mitteln leicht zu lbsen sein durfte. Wie man externe DAG1-Lbser in SIMULINK integrieren kann, werden wir im Abschnitt 4.1.2 kennenlernen. Dieses Buch zeigt noch einen weiteren Weg auf: Man formt die DAGls in DGls um, was uns an mehreren Stellen beschaftigen wird.
3.3.3
Beispiel: Spaltung von Kohlenwasserstoffen
Fur die Spaltung von Ethan haben Sundaram und F’roment [8] einen Folge von 49 Elementarreaktionen angegeben; sie sind in dem File c2H6 in der Matrix mechn zusammengestellt. c2h6 mechn
mechn =
C2H6 ---> 2 CH3. n-C4H10 ---> 2 C2H5. n-C4H10 ---> 1-C3H7. + CH3. 1-C4H8 ---> C3H5. + CH3. C2H4 + H. ---> C2H3. + H2 C2H6 + H. ---> C2H5. + H2 C2H4 + CH3. ---> C2H3. + CH4 C2H6 + CH3. ---> C2H5. + CH4 C2H4 + C2H5. ---> CH3. + C3H6 C2H3. ---> C2H2 + H. C2H5. ---> C2H4 + H. C3H5. ---> C2H2 + CH3. 1-C3H7. ---> C2H4 + CH3. 1-C3H7. ---> C3H6 + H. C4H7. ---> C4H6 + H. C4H7. ---> C2H4 + C2H3. 1-C4H9. ---> C2H4 + C2H5. 1-C4H9. ---> 1-C4H8 + H. C5Hll. ---> C5H10 + H. C5Hll. ---> 1-C4H8 + CH3. C5H11. ---> C2H4 + I-C3H7. C2H2 + H. ---> C2H3. C2H4 + H. ---> C2H5. C3H6 + H. ---> 1-C3H7. C4H6 + H. ---> C4H7. C2H4 + CH3. ---> l-C3H7. C2H4 + C2H3. ---> C4H7. C2H4 + C2H5. ---> l-C4H9. C3H6 + C2H5. ---> C5Hll. C2H4 + 1-C3H7. ---> C5H11.
64 3 Stochiometrie, Therrnodynamik, Reaktionskinetik: Drei SCrulen der CRT C2H3. + H. ---> C2H4 C2H5. + H. ---> C2H6 C3H5. + H. ---> C3H6 1-C3H7. + H. ---> C3H8 C4H7. + H. ---> 1-C4H8 1-C4H9. + H. ---> n-C4H10 C5H11. + H. ---> C5H12 2 CH3. ---> C2H6 C2H5. + CH3. ---> C3H8 C3H5. + CH3. ---> 1-C4H8 C4H7. + CH3. ---> C5+ 2 C2H3. ---> C4H6 C4H7. + C2H3. ---> C5+ 2 C2H5. ---> n-C4HlO 2 C2H5. ---> C2H4 + C2H6 C4H7. + C2H5. ---> C5+ C4H7. + C3H5. ---> C5+ 2 C4H7. ---> C5+ C2H2 ---> 2 C + H2 Mit einem kleinen Programm lassen sich die stochiometrische Reaktionsmatrix und der Komponentenvektor erzeugen (s. Problem 3.4.4); aus Platzgriinden wurde die Ausgabe in Zeilen umgewandelt und zusatzlich nummeriert: zeich='->'; [RN,komp]=checomp2( mechn,zeich); komp komp = 1) C2H6 2) CH3. 3) n-C4H10 4) C2H5. 5) 1-C3H7. 6) l-C4H8 7) C3H5. 8) C2H4 9) H. 10) C2H3. 11) H2 12) CH4 13) C3H6 14) C2H2 15) C4H7. 16) C4H6 17) i-C4H9. 18) C5Hll. 19) C5H10 20) C3H8
21) C5H12 22) C5+ 23) C Die Reaktionsmatrix besteht naturlich uberwiegend aus Nullen (Abb. 3.13); die Besetzung mit endlichen Werten kann man als Muster erzeugen mit dem Befehl NR=RN'; Spy(NR,'d')
Also sind nur etwa 13 % der Matrix besetzt. Anders ausgedriickt: Jede der 49 Spalten (Reaktionen) hat im Mittel etwa drei Eintrage (Komponenten). Diese schwache Besetzung der Matrix konnen wir berucksichtigen und MATLABs sparse matrix techniques verwenden. Zunachst aber erzeugen wir uns mit einem weiteren kleinen Stringverarbeitungsprogramm, C H E M D G L , die Geschwindigkeitsgleichungen des Elementarmechanismus:
3.3 Reaktionskinetik (Gewtrhnliche, auch steife DGls; DAGls)
nz = 146 0
O
'
.-32 10-
15-
20-
fo;
0 0
0
0
0 OO 0 O00
0
8000
O
0
O
800
-
8
O0
0 ~ 8 0 0 0 0 ~ 0 0008 8 0 0 0 ~ oo $ o ~ o o o o
oo
0-
0 0
0000-
0 0
000
0
oooo
0
0 0
0
0 0
80
8O 00800
OOO
OO 0
0
O
Abbildung 3.13: Besetzungsmuster der =-Matrix bei der Ethanspaltung. nz gibt die Anzahl der von Null verschiedenen Eintriige an.
65
66
3 Stochiometrie, Thermodynamik, Reaktionskinetik: Drei Siiulen der CRT
r(25) r(26) r (27) r(28) r(29) r(30) r(31) r(32) r(33) r (34) r(35) r(36) r(37) r (38) r(39) r(40) r(41) r(42) r(43) r(44) r(45) r(46) r(47) r(48) r(49)
= kh(25)*y(9)*y(16) = = =
= =
= = = =
= = = = =
= = = =
= = = = =
=
kh(26)*y(2)*y(8) kh(27) *y(8) *y(10) kh(28)*y(4)*~(8) kh(29)*y(4)*~(13) kh(30)*y(5)*y(8) kh(31)*y(g)*y(10) kh(32)*y(4)*y(9) kh(33)*y(7)*y(9) kh(34) *y(5) *y(9) kh(35)*y(9)*y(15) kh(36)*y(g)*y(17) kh(37)*y(9)*y(18) kh(38) *y(2) **2 kh(39)*y(2)*y(4) kh(40)*y(2)*y(7) kh(41)*y(2)*y(15) kh(42)*y(10)**2 kh(43)*y(10) *y(15) kh(44)*y(4)**2 kh(45)*y(4)**2 kh(46)*y(4)*~(15) kh(47)*~(7)*~(15) kh(48)*y(15)**2 kh(49)*y(14)
Mit diesen Gleichungen konnen wir nun bequem die DGls = NR r erzeugen. Es sei dem Leser uberlassen, verschiedene Losungsmoglichkeiten auszuprobieren; sie sind in den Problemen 3.4.12 bis 3.4.14 skizziert. Ausgefiihrt werden sol1 hier nur noch die Verwendung sparser Matrizentechniken in MATLAB. Wir wghlen eine Reaktionstemperatur von 800 "C und besetzen die Geschwindigkeitskonstantenkh durch Aufruf von C2H6KON:
T= 1073.16;c2 h6kon Dann erzeugen wir eine sparse Version von NR und machen diese Reaktionsmatrix und den Vektor der Geschwindigkeitskonstantenzu globalen GroBen, um sie an das UP C2H6KIN ubergeben zu konnen. AnschlieBend starten wir die G Integration des DG1-Systems, wobei wir nur der ersten Komponente C ~ H einen endlichen Anfangswert zuweisen, und integrieren uber eine Sekunde: NRS=sparse(NR); global kh NRS NR%Wir erhalten eine Warnung, weil GroBen in der neuen MATLAB-Version vor ihrer Besetzung als global erklart werden mussen (leider; der Grund i s t mir unklar).%
3.3 Reaktionskinetik (Gewohnliche, auch steife DGls; DAGls)
67
tic;[t,y]=odel5s('c2h6kin', [O;11,[l;zeros(22,l)]);toc elapsed-time = 1.6880
Das Ergebnis ist in Abb. 3.14 gezeigt.
-
0.2 r
*
-
c
/
'
Oh
-
.---------Q.5 1 Zeit in s
0.5 Zeit in s
1
Abbildung 3.14: Ethanspaltung bei 800 "C. Linkes Teilbild: - Cz=, - - C3=, . . . C4=, - . - . c5= Rechtes Teilbild: - Hz, - - CHI, . . . C5+ Zunachst etwas iiberraschend ergibt sich praktisch kein Unterschied in der Rechenzeit, wenn wir mit der vollen Matrix NR rechnen. Erst bei erheblich gr65erem Umfang wirken sich die unterschiedlichen Speicherungs- und Rechenarten auf die Rechenzeiten merklich aus; dazu konnen im Problem 3.4.10 einige Versuche gemacht werden. Fur ein einmaliges Durchrechnen ist die Rechenzeit kurz genug. Wenn wir aber z. B. die Ethen-Ausbeute optimieren oder kinetische Konstanten in den Reaktionsgleichungen an Meflwerte anpassen wollten, wiirde der haufige Aufruf des DG1-Systems doch vie1 Zeit beanspruchen. Deshalb sollten andere Losungsmoglichkeiten studiert werden, die wie schon erwahnt in den Problemen skizziert sind.
3.3.4 Zusammenfassung Die formale Reaktionskinetik setzt typische Reaktionsmechanismen in DGls um und lost sie. um das Konzentrations-Zeit-Verhaltenzu studieren. Dabei wird
68 3 Stdchiometrie, Thermodynamik, Reaktionskinetik: Drei StiuJen der C R T (oft stillschweigend!) davon ausgegangen, dai3 die Reaktionen in einem ideal vermischten isothermen Riihrkessel von konstantem Reaktionsvolumen ablaufen, die DGls also von der Form sind: dc dt
- = NRr(c)
-
(3.42)
Bei den einzelnen Schritten kann MATLAB die Arbeit ganz erheblich erleichtern. Man schreibt den Reaktionsmechanismus als Strings und setzt diese zu einer Matrix zusammen; ein Beispiel (das noch verbesserungsfahig ist, s. Prcblem 3.4.3) ist in dem File c 2 ~ fur 6 einen vereinfachten Mechanismus der thermischen Ethan-Spaltung zu finden. Mit MATLABs Zeichenkettenverarbeitung kann man dann aus der Mechanismus-Matrix automatisch erzeugen: 0
0
die Matrix der stochiometrischen Koeffizienten des Reaktionssystems, die (Komponenten-)Reaktionsmatrix NR bzw. ihre Transponierte RN (Programm-File CHECOMP2) das Gleichungssystem r = r(c), das in dieser Form ohne weiteres in ein Unterprogramm fur einen DG1-Loser von MATLAB eingebunden werden kann (File C H E M D G L ) ; mit ,,Suchen und Ersetzen" eines Editors oder Textverarbeitungsprogramms konnen leicht Anderungen fur FORTRAN oder C/C++ durchgefuhrt werden.
Damit sind die arbeitsaufwendigen und fehlertrachtigen Schritte der Prcgrammierung automatisiert. Am bequemsten, aber nicht am schnellsten, kann die Losung des DG1Systems mit einer einzigen Anweisung im MATLAB-Fenster erfolgen. Wie man die Reaktionsmatrix NR analysieren und weiterverarbeiten kann, wurde bereits im Abschnitt 3.1 besprochen. DAGls werden im Problem 3.4.15 angegangen und in den folgenden Kapiteln wei tergefilhrt .
3.4 Probleme und Losungen 3.4.1
Wahl von Nichtschlusselkomponenten (*)
Bei der Dampfspaltung von Methan konnen noch weitere Komponenten auftreten, vor allem C und C2H6. Wir benotigen dann 7 - 3 = 4 Schlilsselkomponenten, um aus der Element-Spezies-Matrix einen vollstandigen stochiometrischen Satz abzuleiten. Probieren Sie aus, dai3 das Verfahren nicht funktioniert, wenn man als Schlilsselkomponenten H20, CO, C02 und C wahlt. Dann sind namlich in den Nichtschltisselkomponenten H2 , CH4 und C ~ H nicht G alle Elemente ent halten.
3.4 Probleme und Ltrsungen
69
Losungsvorschlag Wenn Sie mit verschiedenen Anordnungen von Schlussel- und Nichtschlusselkomponenten experimentieren wollen, mag es Ihnen 1Btig erscheinen, jedesmal den Speziesvektor und die ESM neu zu formulieren. Dann sollten Sie zunachst das folgende Problem betrachten, in dem ein Weg gewiesen wird, den Speziesvektor geschickter zu formulieren und dann die Anordnung der Komponenten und die korrespondierende Anordnung der ESM durch eine einfache Matrizenmanipulation zu andern.
3.4.2 Korrespondierende Manipulation von ESM und Spezies-Vektor (** bis ***; * wenn stoich als Vorlage benutzt wird) Wenn man verschiedene Wahlmoglichkeiten von Schlussel- und Nichtschlilsselkomponenten realisieren mbchte, kann die Umstellung der ESM und des Speziesvektors Sp l%tig werden, besonders bei groflen Komponentensystemen wie etwa bei deyH2-Verbrennung. Wer haufiger mit grdfleren Systemen umgeht, wird sich hier komfortablere Maglichkeiten schaffen. Losungsvorschlag
Dazu bietet MATLAB geeignete Manipulationen von Matrizen (und damit naturlich auch von Vektoren) an. Den Speziesvektor sollte man zunachst anders einrichten. Es bietet sich an, die Komponenten als einzelne Strings so in einem Vektor anzuordnen, d d ihre Reihenfolge mit den Spalten der ESM ilbereinstimmt. Dann kann man MATLABs Vektorindizierung von Matrizen zur korrespondierenden Umstellung von ESM und Speziesvektor benutzen. Fur diesen Zweck konnen STOICHQ und STOICH4 die Files STOICH und STOICH:! ersetzen. STOICHQ
%Das Script-File stoich3.m gibt einen Satz unabhaengiger %stoechiornetrischer Gleichungen aus. In der Workspace muessen %bereitgestellt werden: Die Stringrnatrix s mit den Kornponenten %und die Element-Spezies-Matrix ESM nach den beiden folgenden %Mustern: %s=str2rnat( 'H2', 'H20', 'CH4', 'CO', ' C 0 2 ' ) ;
%SEM=[0,2,0;0,2,1;1,4,0;1,0,1;1,0,2]; %Die stoechiometrische Matrix wird in NS bereitgehalten. %Die Arbeitsweise von stoich3 entspricht der von stoich irn Abschnitt 3.1.1.%
STOICH4 %Das Skript-File stoich4 gibt Reaktionsgleichungen aus, die %in der Workspace durch die Reaktionsrnatrix NR und die String%Matrix s definiert wurden. Dann gibt stoich4 %einen Satz unabhaengiger stoechiometrischer Gleichungen aus.
70 3 St(lchiometrie, Thermodynamik, Reaktionskinetik: Drei SBulen der CRT %Die Schluesselkomponenten muessen die ersten in s sein. %Beispiel fuer s und NR: %s=str2mat( 'CO' , 'CH4', ' H2',' H 2 0 ' ,'C02'); %NR=(-1 -1 0;1 0 1;-3 1 -4;l -1 2;O 1-11; %Die stoechiometrische Matrix wird in NS bereitgehalten. %Die Arbeitsweise von stoich4 entspricht der von stoich im Abschnitt 3.1.1.%
3.4.3 Erzeugung einer String-Matrix aus einem Reaktionsmechanismus (*) Das Vorgehen in der Datei ~ 2 ~ den 6 ,Reaktionsmechanismus in eine StringMatrix zu bringen, ist noch etwas anfangerhaft. Programmieren Sie eine bequemere Methode! Losungsvorschlag Ein Losungsvorschlag ist in der Datei GLEICHU zu finden GLEICHU
YOgleichu
liest Reaktionsgleichungen
% als String ein und bildet aus ihnen % die Matrix mechn. Ende mit E.
'1
xei n=[' ; mech=[] ;mec hn=[]; while xein(1) ^.='E' xein = input('Naechste Gleichung','~'); mech=str2mat( mech,xein); end si=size( mech); mechn=mech(2:si( 1)-1,:); disp('Vergessen Sie nicht, mechn zu speichern!')
3.4.4 Automatische Generierung der Reaktionsmatrix fur einen Reaktionsmechanismus (Chemischer Compiler 1) (***) Dies ist eine schwierige Aufgabe, auch wenn man mit MATLABs Stringverarbeitung schon etwas vertraut ist. Es wird sie nur jemand angehen, der haufiger mit grijileren Reaktionssystemen zu tun hat. Losungsvorschlag Ein Losungsvorschlag ist in CHECOMP:! zu finden. CHECOMP2 function [RN,komp] = checomp2(mechn,zeich)
YO"chemischer compiler"
3.4 Problerne und Ltisungen
71
%Das function file berechnet die Reaktionsmatrix R N und den %Komponentenvektor komp aus der String-Matrix mechn der chemischen %Reaktionen. Das Reaktionszeichen "=", "->" oder " muss als %String uebergeben werden. si=size( mechn); k=l; rem=mechn( 1,:); [token,rem]=strtok(rem); %Untersuche den ersten Term der ersten Gleichung; wenn er nicht aus Buchstaben besteht (Komponente), dann ist er eine positive Zahl ungleich 1, die als stochiometrischer Koeffizient (negativ, da linke Seite!) in der Matrix RN gespeichert wird; der ngchste Term ist dann ein Komponentenname. Wenn der erste Term jedoch aus Buchstaben besteht, dann handelt es sich um eine Komponente, die den stbchiometrischen Koeffizienten -1 erh%lt.% if isletter(token) == 0 RN( l,l)=-str2num(token); <===>I'
[token,rem]=strtok(rem);
else RN( 1 1)=-1; end ~
komp=str2mat(token);%Die Komponente (genauer: ihr Name) wird in der Stringmatrix komp gespeichert% for i = l:si(l)% Die Terme der Reaktionsgleichungen werden untersucht% I rem =O ; fak=-l;%wird benutzt, urn die Zahlen der linken Seiten in negative stochie metrische Koeffizienten zu verwandeln% rem=mechn (i, :); while lrem == 0 tokold='l';
I=O;
[token,rem]=strtok(rem); if token == '+'%wenn zutreffend, ist der ngchste Term eine positive Zahl ungleich 1 oder eine Komponente% [token,rem]=strtok( rem); end if token(1) == zeich(l)%wenn Reaktionszeichen, fak=l;%folgt die rechte Seite, fur die die stochiometrischen Koeffizienten positiv sein sollen.% [token,rem]=strtok(rem);%ntichster Term (Zahl oder Komponente)% end if isletter(token) %Wenn Zahl, tokold = token;%dann zwischenspeichern% [token,rem]=strtok( rem);%Neuer Term ist Komponente% end
72 3 Sttrchiornetrie, Thermodynamik, Reaktionskinetik: Drei Ssulen der CRT %Komponente mit bereits vorhandenen vergleichen% for j = l : k I=strcmp(deblank( komp(j,:)),deblank(token)); if I == l%Wenn schon vorhanden, R N ( ij)=fa k*str2nurn(tokold);%den zwischengespeicherten stochiometrischen Koeffizienten mit dem richtigen Vorzeichen in der Reaktionsmatrix speichern% brea k%Die for-Schleife verlassen end %if end %for if 1 == O%Wenn Komponente noch nicht vorhanden, k=k+l;%Laufzahl fiir die Komponenten erhohen RN(i, k)=fak*str2num(tokold);%st~chiometrischen Koeffizienten speichern% kom p=str2mat (kom p,token);%Komponente spcichern in der Stringmatrix% end ?&f if isempty(strtok(rem)) == l%Wenn Ende der Reaktionsgleichung erreicht, I rem =1;%while-Schleife verlassen. end end %while end %for; nachste Reaktionsgleichung untersuchen%
3.4.5
Automatische Generierung der Geschwindigkeit sgleichungen fur einen Elementarmechanismus (Chemischer Compiler 2) (**)
Losungsvorschlag Ein Losungsvorschlag ist in
CHEMDGL
zu finden.
CH E M D G L
% chernische DGI % N R Reaktionsmatrix, z. B. [-1-1 0 ; l 0 1;-3 1 - 4 ; l -1 2;O 1-11% x=NR'; si=size( NR'); for i=l:si( 1) is=num2str(i); Is=['kh is, rs=['kr(',is,')']; for j=l:si(2) js=num2str(j); if x(i,j) < 0 a bsx=a bs(x( ij)); if absx == 1 Is=[Is,'*y(',js,')'J; elseif absx > 1 a bsxs=nurn2str( a bsx); ( I ,
I)'];
3.4 Probleme und Ltrsungen
73
Is=[ls,'*y(',js,')**',absxs]; else end elseif x(i,j) > O a bsx=a bs(x( i,j)); if absx == 1 rs=[rs,'*y(',js,')']; elseif absx > 1 a bsxs=num2str( absx); rs=[rs,'*y(',js,')**',absxs]; else end else end end %Fur reversible Mechanismen muB die folgende Zeile rz entsprechend erganzt we rden% rz=['r(', is, ') = Is]; disp( rz) rv=str2mat(rv,rz); I,
end
Wasserdampfsatt iger (*)
3.4.6
Auf welche Temperatur m d der Wasserdampfs2ttiger in Abb. 3.2 eingeregelt werden, damit bei einem Gesamtdruck von 10 bar das molare H20/CH4Verhaltnis vier betrtigt? Losungsvorschlag
Der Gesamtdruck ist 10 bar, das molare H2O/CH4-Verh<nisist vier, also ist der H2O-Partialdruck 8 bar. Es gibt eine Reihe von Moglichkeiten, aus Angaben zur Dampfdruckkurve die Temperatur fur 8 bar zu bestimmen. Zunachst: Wo findet man solche Angaben? Zum Beispiel im ,,Perry" [9]:
TC
=
p=
[lo0 120.1 152.4 180.5 213.11;
[ 1 2 5 10 201;
(TC in " C , p in bar) Zur Interpolation benutzt man entweder die Dampfdruckgleichung oder ein Interpolationspolynom; in jedem Fall gibt es wieder mehrere Mbglichkeiten. Am einfachsten (aber etwas umstthdlich) ist es, die Werte in ein log(p)-1/TDiagramm einzutragen.
74 3 Stdchiometrie, Thermodynamik, Reaktionskinetik: Drei SBulen der CRT Ein Interpolationspolynom ist z. B. spline: p8=8; T8 = spline(p,TC,p8) T8 =
170.9223 Von der Genauigkeit der Interpolation iiberzeugt man sich am besten grafisch (Abb. 3.15): Tplot=80:5:220; pplot=spline(TC, p,Tplot); pIot(TC,p,'+',Tplot,pplot,'-',T8,~8,'o')
25 20$152 1c-
5-
Abbildung 3.15: Dampfdruckkurve von Wasser. Tabellenwerte, - Spline, o interpolierter Wert.
+
Das Wertepaar p 8 und T8 stimmt auch gut mit der Antoine-Gleichung fur Wasser uberein: ph2o=exp( 18.3036-3816.44/(T8+273.16-46.13))/760 ph2o = 8.0052
3.4 Probleme und LBsungen
75
3.4.7 Synthesegaszusammensetzung aus der Analyse des trockenen Produktgases (*) Nach dem Wasserabscheider in Abb. 3.2 wird das trockene Produktgas durch NDIR- Analysatoren geschickt. Berechnen Sie aus den Analysenergebnissen (im Datenfile SYNYOUT.DAT) die Gaszusammensetzung am Reaktorausgang. (Versuchsbedingungen: Gesamtdruck 10 bar, Methandurchsatz 2 Ncm3/s, molares Dampf-Methan-Verhtiltnis 4, Reaktortemperatur 850 " C . )
%CH4
%COz
%CO
1.3190ef001 1.3153e+001 1.3119e+001 1.3319e+001 1.3359e+001 1.3301e+001 1.3500e+001 1.3324e+001 1.3374e+001 1.3016e+001 1.3259e+001
6.7594e-001 6.4 163e-001 6.3656e-001 5.6246e-001 6.1028e-001 6.1750e-001 6.1289e-001 6.5334e-001 7.1543e-001 6.3215e-001 6.3406e-001
(Der Rest ist Wasserstoff, andere Bestandteile ktinnen vernachlssigt werden.) Losungsvorschlag
Die Berechnung der Zusammensetzung des nassen Gasgemisches am Reaktorausgang kann auf vielen Wegen erfolgen, die aber nicht alle gleichwertig sind. Wir beziffern die Komponenten wie folgt:
CH4 COz H2O CO Hz 1
2
3
4
5
(3.43) (3.44)
Die Molanteile im trockenen Produktgas (tr) sind mit den Stromen verknitpft durch die Beziehung:
xi(tr) =
Ni E N , - N3
(3.45)
Also gibt jeder Mei3wert eine Beziehung zwischen den Ni; zustitzlich zu den Elementarbilanzen bentitigen wir zwei MeBwerte, um alle Molstrtime und damit alle Molanteile am Reaktorausgang berechnen zu ktinnen. Die Meflwerte (im File SYNYOUT.DAT enthalten) sind aber fehlerbehaftet, und das in unterschiedlichem Ausmai3. Aus den angegebenen Analysenergebnissen kbnnen zuntichst
76 3 Sttichiometrie, Thermodynamik, Reaktionskinetjk: Drei Siiulen der CRT mit der Anweisung halten werden:
STAT
folgende Mittelwerte und Standardabweichungen er-
load synyout.dat
Fiir CH4:
[mxtrl, sdevxtr 11=stat
(synyout( : ,1))
mxtrl = 6.3566e-001 sdevxtri = 3.7173e-002 Fur COz : [mxtr2, sdevxtr2]=stat(synyout(: ,2))
mxtr2 = 9.2180e+000 sdevxtr:! =
2.1300e-001 Fur CO:
[mxtr4, sdevxtr41=stat( sy nyout( : ,3)) mxtr4 = 1.3265e+001 sdevxtr4 = 1.2974e-001
Die Werte fiir Methan sind am ungenauesten, wie die relativen Standardabweichungen zeigen: sdevxtrl/mxtrl*lOO ans =
5.8480e+000 sdevxtr2/ mxtr2* 100 ans =
2.3107e+000 sdevxtr4/mxtr4*100 ans =
9.7807e-001
Wenn wir alle drei Werte verwendeten, hiitten wir ein iiberbestimmtes Gleichungssystem, filr das wir eine Least-squares-Losung berechnen konnten; das mui3te strenggenommen eine gewichtete sein. Da wir den Fehler in den Zustrb men nicht kennen (eine bose Nachlasigkeit des Experimentators, die Sie bei eigenen Simulationen rnit EXPUNIT2 verbessern konnten!), verzichten wir auf eine gewichtete Lbsung. Stattdessen wahlen wir die beiden genaueren Mefiwerte fiir COz und CO und e r g a z e n die drei Elementarbilanzen urn die beiden folgenden Gleichungen, die durch Umformen von G1. (3.45)entstehen:
3.4 Probleme und Ltlsungen
mxtr2
* N1+
(mxtr2 - 1) * Nz
77
+ 0 * N3 +mxtr2 * N4 +mxtr2 * N5 = 0 (3.46)
mxtr4 * Nl f m x t r 4 * Nz + O
* N3 + (mxtr4 - 1) * N4 + mxtr4 * N5
=0
(3.47) Wir sollten uns zur Vorsicht noch iiberzeugen, dai3 die Mefifehler statistisch verteilt sind. Dazu plotten wir die Residuen, als Beispiel filr CH4 (Abb. 3.16): si=size(synyout); xa= 1:si( 1);ya=zeros( 1,si ( 1)); mean-sdev=surn(synyout)/si( 1); plot(xa,synyout(: , 1)-mean-sdev( l),'k+' ,xa,ya,' k') axis([O 12 -0.10.1 1)
0.1
0.05
I*
t
t
+
* 5 0 * 0 --0.10
2
4
+
6
a
10
Listen-Nummer der Methan-MeOwerte
2
Abbildung 3.16: Residuenplot der Methan-Mefiwerte. In Abb. 3.16 ist kein signifikanter Trend zu entdecken. In MATLAB wiirde sich das Gleichungssystem etwa folgendermafien konfigurieren und losen lassen: Die Element-Spezies-Matrix (in der Reihenfolge CHO) ist
78 3 St(ichiometrie, Thermodynamik, Reaktionskinetik: Drei Saulen der CRT SEM=[1 4 0 ; l 0 2;O 2 1;l 0 l ; O 2 01; ESM=SEM ’
ESM = 1 1 0 1 0 4 0 2 0 2 0 2 1 1 0
Dann weiter in kompakter Form: NO( 1)=2/22400*1e-03; %kmol/s, Zustrom CH4 NO=[NO( 1);0;4*NO( 1);O;Ol; x=[ones( 1,5)*mxtr2/ 100;ones(1,5)*mxtr4/ 1001;%relative Molanteile x( 1,[2I3])=[x( 182)- 1I01; x( 2 [3,4]) =[O ,x(2,4)- 11; I
Bei den wenigen Gleichungen und Variablen lt&t sich x auch durch direkten Eintrag besetzen, wobei man die beidenvariablennamen jeweils kopiert: rmxtr2=mxtr2/ 100;rmxtr4=mxtr4/ 100; x=[ rmxtr2, rmxtr2-1,0, rmxtr2, rmxtr2;rmxtr4,rmxtr4,0,rmxtr4-1, rmxtr41; esmxtr=[ESM;x];
Die L6sung von Ax = b gewinnt man mit der Anweisung x = A\b, hier also N=esmxtr\[ ESM*NO;O;O]; xnass=N/sum( N) xnass = 0.0053 0.0570
0.3813 0.0821 0.4743
3.4.8 Uberprufung eines Reaktionsgemisches am Reaktorausgang auf Gleichgewicht (*) Anhand der Versuchsbedingungen und der Analysenergebnisse in 3.4.7 ist zu prilfen, ob sich das Reaktionsgemisch am Reaktorausgang im thermodynamischen Gleichgewicht befindet.
Losungsvorschlag Die folgenden MATLAB-Anweisungen filhren diese Berechnungen fizr unser Beispiel durch (alle Daten stammen aus [S]): Wir haben 5 Komponenten und 3 Elementarbilanzen und benotigen deshalb zwei Gleichgewichtsbeziehungen,denen die Komponenten bzw. ihre Molanteile
3.4 Probleme und Ldsungen
79
(oder entsprechende Grbi3en) geniigen miissen. Genauso wie wir zwei beliebige stochiometrische Gleichungen gewtihlt haben, aus denen durch Linearkombination jede gewiinschte Reaktionsgleichung erhalten werden kann, kbnnen wir die zugehbrigen Gleichgewichte formulieren. Wenn diese Gleichgewichtsbeziehungen erfiillt sind, mui3 jede ableitbare Reaktion nach dem 1. Hauptsatz ebenfalls im Gleichgewicht sein. Unsere gewtihlten stbchiometrischen Gleichungen waren:
CO + 3H2 = CH4
CO
+ €320
+ H2O = C02 + H2
(3.48)
(3.49)
Die entsprechenden Gleichgewichtsbeziehungen(Index e (equilibrium): Gleichgewicht) sind:
(3.50)
(3.51)
Die Berechnung der Gleichgewichtskonstantenfolgt nun dem Schema, das im Abschnitt 3.2 skizziert wurde. Die MATLAB-Anweisungen sind im File SYNG A - GL zusammengefdt, die wichtigsten im folgenden angegeben. Die meisten Schritte diirften selbsterkltirend sein. Zuntichst wird die Matrix NS der stbchie metrischen Koeffizienten der beiden gewtihlten stochiometrischen Gleichungen besetzt. Dann werden den benbtigten thermodynamischen Grbflen Werte zugewiesen. Diese Werte sind nicht etwa eingetippt, sondern aus Tabellen mit copy and paste iibernommen, ein Verfahren, das die meisten Leser anwenden konnen. Schliefllich wird die freie Reaktionsenthalpie (delg) berechnet, so wie es im Abschnitt 3.2 beschrieben wurde, und aus ihr die Gleichgewichtskonstante Ka bzw. Kx. Wie man sieht, sind alle Wertzuweisungen und Berechnungen fiir das vorliegende Beispiel formuliert. Wer bfter Berechnungen dieser Art machen muB, wird sich ein allgemeineres Programm nach diesem Muster schreiben, das fiir eine variable Anzahl von Komponenten und Reaktionen eingesetzt werden kann. SYNGA-GL
% ne number of elements = nk - ns % nc number of components % ns number of stoichiometric eqs nc=5;ns=2;
NS=[1 0;O 1;l -1;-1-1;-3 11;
80 3 St(lchiometrie, Thermodynamik, Reaktionskinetik: Drei SSulen der CRT nues=[-2;0]; CPVAP(1,1:4)=[ 1.925E+l 5.213E-2 1.197E-5 -1.132E-81; DELHF(1) = -7.490E+4; DELGF( 1) = -5.087E+4; CPVAP(2,1:4)=[ 1.980E+1 7.344E-2 -5.602E-5 1.715E-81; DELHF(2) = -3.938E+5; DELGF(2) = -3.946E+5; CPVAP(3,1:4) = [ 3.224E+1 1.924E-3 1.055E-5 -3.596E-91; DELHF(3)z -2.420E+5; DELGF(3)= -2.288E+5; CPVAP(4,1:4)=[ 3.087E+1 -1.285E-2 2.789E-5 -1.272E-81; DELHF(4)= -1.106E+5 ; DELGF(4)= -1.374E+5; CPVAP(5,1:4)=[ 2.714E+1 9.274E-3 -1.381E-5 7.645E-9 1; DELHF(5)=O.O; DELGF(5)= 0.0; T=850+273,16;T2=T*T;T3=T2*T;T4=T3*T; TB=298.16;TB2=TB*TB;TB3=TB2*TB;TB4=TB3*TB; dela =NS ' * C PVAP( :,1) ;del b= NS' * CPVAP ( :,2) ;delc= NS ' * CPVA P( :,3); deld=NS'*CPVAP(:,4); delh298=NS'*DELHF'; delg298=NS'*DELGF'; del hO=del h298-dela*TB-.5*del b*TB2-1/3*delc*TB3-.25*deld*TB4; I=(delg298-delhO+dela*TB*log(TB)+O.5*delb*TB2+1/6*delc*TB3+. .. 1/12*deld*TB4)/TB; delg=delhO-dela*T*Iog(T)-.5*del b*T2-1/6*delc*T3-1/12*deld*T4+1*T; RG=8.314; p=lO;%bar Ka=exp(-delg/RG/T); Kx=Ka.*(p*ones(ns,l)). -(-nues); Man beachte, dai3 viele Gleichungen Vektor- oder Matrix-Gleichungen sind. Auffsllig wird das besonders in der letzten Gleichung, in der MATLABs spezielle Operatoren .* und .^ auftreten. (In der stochiometrischen Matrix NS sind den Schlusselkomponenten CH4 und C02 die Koeffizienten +1 zugewiesen. Wie wir in spateren Kapiteln noch sehen werden, hat das fur die Formulierung stochiometrischer Beziehungen gewisse Vorteile; man mui3 aber daran denken, wenn man die Werte der Gleichgewichtskonstanten betrachtet.) Nachdem wir die Zusammensetzung am Reaktorausgang berechnet haben (s. Problem 3.4.7), konnen wir die Gleichgewichtsausdricke
bilden und mit den Gleichgewichtskonstanten Kz,I und Kz,2 vergleichen:
3.4 Problerne und Ldsungen pi l=prod(xnass.
A
81
NS(:, 1))
pi1 = 0.2291 pi2=prod(xnass.
NS(:,2))
pi2 = 0.8644 synga-GI Kx
Kx = 0.1984 0.8167
Es hat sich also kein Gleichgewicht im Reaktor eingestellt.
3.4.9 Gleichgewicht a m Reaktorausgang (*) Welche Gleichgewichtszusammensetzung wiirde sich unter den Reaktionsbedingungen von Problem 3.4.7 a m Reaktorausgang einstellen? Ltkungsvorschlag Die Hauptarbeit, die Berechnung der Gleichgewichtskonstanten,ist schon mit der Losung von Problem 3.4.8 getan worden. Wir miissen jetzt berechnen, fih welche Werte der Molanteile 2 1 bis 2 5 die durch die beiden sttjchiometrischen Gleichungen gegebenen Gleichgewichte erfiillt sind; Nebenbedingungen sind die Elerr.entarbilanzen, die gleichzeitig erfiillt sein miissen. Wir haben also ein Gleichungssystem zu losen, das aus den beiden nichtlinearen Gleichgewichtsbeziehungen und drei linearen Elementarbilanzen besteht: das sind 5 Gleichungen f i h 5 Unbekannte. Es gibt mehrere Mtiglichkeiten, wie man diese Rechnung durchfilhren kann, z. B.: a) (Poor man’s method): Man benutzt die drei Elementarbilanzen, um drei (Nichtsch1iisseL)Komponentendurch die beiden restlichen (Schliissel-) Komponenten auszudriicken und setzt diese Ausdriicke in die beiden Gleichgewichtsbeziehungen ein. Es verbleiben zwei nichtlineare Gleichungen mit zwei Unbekannten, die man zur Not sogar grafisch ltjsen kann. Ein solches Vorgehen ist iiberholt! b) Man benutzt eine subroutine einer Programmsammlung oder eines Software-Pakets, die ein Gleichungssystem f(x) = 0 ltjsen kann; alternativ kann man auch eine Optimierroutine benutzen, die das Minimum einer Funktion von mehreren Vertinderlichen, f(x),unter den Nebenbedingungen g(x) <= 0 findet. f(x) = 0 kann man in MATLAB mit fsolve lbsen (nicht in der SE); das Unterprogramm SYNGAFUN zeigt, wie im vorliegenden Fall das Gleichungssystem aufgestellt werden kann:
82 3 Stdchiometrie, Thermodynamik, Reaktionskinetik: Drei Saulen der CRT SYNGAFUN
function f = syngafun(x) %CH4 C02 H20 CO H2 global ESM2 Kx NO f( 1:3)=ESM2*(x-N0); f(4)= x( l)*x( 3)/x(4)/x( 5) 3*surn(x) ,2 - Kx(1); f( 5 ) = ~ ( 2 ) * ~ ( 5 ) / ~ ( 4 ) / ~ (- 3Kx( 2) ) ; A
Man muB zuntichst die drei angefiihrten Variablen als global deklarieren und besetzen: global ESM2 Kx NO
K, gewinnt man mit dem Programm SYNGA-GL, wie oben im Problem 3.4.8 beschrieben. SEM=[l 4 0 ; l 0 2;O 2 1;l 0 l ; O 2 O];ESM2=SEM’; NO( 1)=2/22400*1+03; NO=(NO( 1);0;4*NO( 1);O;OI;
Als Startwerte nimmt man zweckmaaig die Molstrome am Reaktorausgang, die sich im Problem 3.4.7 aus den Analysenwerten des trockenen Gases ergaben:
N = 1.0e-006 0.0033 0.0353 0.2358 0.0508 0.2934
*
nx=fsolve( ’syngafun’,N) nx = 1.0e-006 * 0.0029 0.0343 0.2365 0.0521 0.2935
Probe: pixl=prod(nx. pix1 = 0.1984
A
NS(:,l))*surn( nx) ^ 2
3.4 Probleme und Losungen
83
pix2=prod(nx. NS(:,2)) pix2 = 0.8167 Kx A
Kx
=
0.1984 0.8167
c) Man kommt auch mit einer Routine aus, die das Minimum von f(x) ohne Beriicksichtigung von Nebenbedingungen sucht; eine solche Routine ist fmins, die auch in MATLABs Student Edition enthalten ist; man hat dann selbst dafilr zu sorgen, dai3 Nebenbedingungen erfiillt sind. Man konnte wie in poor man's method daran denken, das Gleichungssystem durch AuflZisen der Elementarbilanzen auf die beiden Gleichgewichtsbeziehungen mit den zwei Schlrisselkomponenten zu reduzieren. Das wtire unnbtig umstandlich, solange die numerische Losung der Elementarbilanzen bei der Berechnung der Zielfunktion nicht ungebtihrlich vie1 Rechenzeit kostet; das ist hier kaum zu befiirchten. Anhand der folgenden Ein- und Ausgaben ltii3t sich der Lbsungsweg verfolgen: SYZJGAFU2
function f = syngafu2(x) global ESM2 Kx NO xr %In den beiden ntichsten Zeilen wird die Gleichung ESM2*N = ESM2*No benutzt und dem Problem entsprechend partitioniert.% b=ESM2*NO; ~ Nco, b=b-ESM2(:,1:2)*x;% x enthdt N C H und xr=ESM2(:,3:5)\b;% xr enthtilt N H ~ oN, c o und N H ~ kxl=x(l)*xr(l)/xr(2)/xr(3)A3*surn([x;xr]) -2; kx2=x( 2)*xr( 3)/xr( 2)/xr( 1); f=(( kxl-Kx( l))/Kx( 1))^ 2 ((kx2-Kx(2))/Kx(2)) 2;
+
xrn=frnins('syngafu2',NO( 1:2))
xm= 1.0e-007 * 0.0287 0.3440 global xr syngafu2(xrn) ans =
4.860le-005 % h k t i o n s w e r t f (Summe der Abweichungsquadrate)
84 3 Stbchiornetrie, Therrnodynamik, Reaktionskinetik: Drei Stiulen der CRT xr
xr = i.Oe-006 0.2363 0.0520 0.2936
*
nx =[xm;xr] w = 1.0e-006 0.0029 0.0343 0.2365 0.0521 0.2935
*
Also dasselbe Ergebnis wie mit Methode b).
3.4.10 Rechengeschwindigkeit mit vollen und sparsen Matrizen im Vergleich (*) Losungsvorschlag Am einfachsten erzeugt man sich eine grofle Matrix, einmal voll und einmal sparse, und multipliziert sie mit einem Vektor. Eine volle (1000,1000)-Matrix nimmt etwa 8 MB im Speicher ein!
3.4.11
Molwiirme eines realen Gases (*)
Die Molwiirme eines realen Gases unterscheidet sich von der im idealen Gaszustand, bei gleicher Temperatur und Zusammensetzung, Cp, um einen realen Anteil, AC, (C, = CE + AC,). Mit Hilfe einer druckexpliziten Zustandsgleichung kann man AC, nach folgender thermodynamischer Beziehung berechnen:
(3.53) Der Einfachheit halber sei nur ein reines Gas betrachtet, z. B. Methan, und AC, filr Raumtemperatur und 300 bar berechnet. Losungsvorschlag Bei Rechnungen der vorliegenden Art wird man mehrere Methoden anwenden, um eine Vorstellung von der Zuverlkssigkeit der geschgtzten Werte zu erhalten, also etwa mehrere Zustandsgleichungen verwenden. Vier der bekanntesten druckexpliziten Zustandsgleichungen, van der Waals, Redlich-Kwong (RK), Soave-Redlich-Kwong (SRK) und Peng-Robinson (PR), lassen sich auf dieselbe Form bringen (s. z. B. [6]):
3.4 Probleme und Ldsungen
85
RT a p=-(3.54) V-b V2+ubV+wb2 Man wird also seine Rechnungen so anlegen, da5 man nur die Koeffizienten u, w, a und b austauschen m d . Wir beschruken uns im folgenden beispielhaft auf die RK-Gleichung. Ein MATLAB-Programm kbnnte dann wie folgt aussehen: DELCP global p R T b a u Tc pc psyma syms p R T V b a u Tc pc psym pnum psyma 2+u*b*V+w*b 2); psym=R*T/(V-b)-a/(V u=l;w=O;%Redlich-Kwong (oder Soave) a=0.42748*RA 2*TcA2.5/pc/TA0.5;%( RK) psyma=R*T/(V-b)-a/(V * 2+u*b*V); OhN2********** A
pc=33.9;Tc=126.2;%kritische T=673.16;~=300; Oo/ *
Werte
* *********** * ** *** * * *
c
ol0 ~ 4 *
pc=46.O;Tc=190.4; T=298; O/o*
* * *** * * * **** *
R=83.1433;%(cm3 bar)/(mol K) b=O.O8664*R*Tc/pc;%( RK) d2pdT2=diff( psyma,'T',2); dpdT=diff( psyma,'T'); dpdV=diff(psyma, 'V'); Vrk=fzero('delCpV', R*T/p); Integ=int(d2pdT2,V,le20,Vrk); V=Vrk; delCpber=eval( char( T*lnteg-T*dpdTA2/dpdV-R)); delCpber=delCpber*8.1344/R;%J/mol K Tr=T/Tc;pr=p/pc;%Fur Lee-Kesler Tcp=[l T T A 2T-31'; Cpk=[3.115el -1.357e-1 2.680e-5-1.168e-8];%N2 Cpk=[ 1.925e1 5.213e-2 1.197e-5 -1.132e-8);%CH4 CpO=Cpk*Tcp;
DELCPV function f = delCpV(V) global p R T b a u Tc pc psyma f=p-eval(char( psyma));
Es wird also zunachst die allgemeine Form der vier genannten Zustandsgleichungen als symbolische Gleichung geschrieben und dann der Ausdruck fiir a eingesetzt, das T als Variable enthalt; dieser Ausdruck erhalt einen neuen Namen,
86 3 StBchiometrie, Thermodynamik, Reaktionskinetik: Drei Saulen der CRT psyma. Dann werden alle anderen Grbi3en rnit ihren Werten eingesetzt und anschlieaend die Ausdrilcke nach G1. 3.53 berechnet. Das fur den Integralausdruck erforderliche reale Molvolumen wird mit einer einzigen Anweisung erhalten; das kurze UP filr fzero, DELCPV,ist ebenfalls angegeben. Man konnte das Ergebnis filr AC, - in delCpber - mit dem Wert nach der Lee-Kesler-Methode vergleichen, und, wie schon gesagt, auch die anderen Zustandsgleichungen verwenden. Am S c h l d des Programms wird noch Cj berechnet. Das Beispiel zeigt wohl, wie man knapp und schnell eine Ad-hoc-Rechnung programmieren kann. Fur hi-iufigeren Gebrauch wird man ein solches Programm etwas anders gestalten, z. B. mit Schaltern filr die verschiedenen Zustandsgleichungen arbeiten, Temperatur- und Druckfelder zulassen, die Ein- und Ausgabe zweckentsprechend gestalten und besser ein function file verwenden; filr ein gr8i3eres Programmpaket, eine Art thermodynamische Toolbox, die alle oder die meisten giingigen Berechnungen erledigen soll, muO man schon etwas mehr Planung aufbringen.
3.4.12
SIMULINK-Model1 der Ethan-Spaltung rnit MATLAB-Fcn-Block (**)
NBhere Angaben zur Ethanspaltung finden Sie in Abschnitt 3.3.3. Der Gebrauch eines MATLAB- Fcn-Blocks ist besonders bequem; beachten Sie aber die Ausfilhrungen zur Rechengeschwindigkeit im Handbuch. Rechnen im Block ist verpbnt; am schnellsten arbeitet er noch, wenn er nur zum Aufruf eines M-Files benutzt wird. Das Maximum kann man i. a. erreichen, wenn man das M-File mit dem MATLAB-Compiler zu einem M E X - bzw. bei den neueren Versionen zu einem dll-File macht. Besser compiliert man das M-File zu einer M-file Sfunction und ersetzt den MA TLAB- Fcn-Block durch einen S-hnction-Block; in C programmierten S-Funktionen sowie Fcn-Blocken sind auch solche compilierten Dateien zur Zeit noch unterlegen. Man sollte sich nicht von der kompakten Codierung, die in MATLAB mtrglich ist , verleiten lassen, umfangreiche Rechnungen in einen MATLAB-Fcn-Block zu verlegen; wenn es sich aber anbietet, sollten alle Rechenschritte ausgelagert werden, die sich leicht durch SIMULINKBlocke bilden lassen. Die beiden folgenden Ldsungsvorschlage stecken die Mrjglichkeiten beispielhaft ab. Losungsvorschlag 1 Die folgende Datei zeigt eine kompakte Berechnung der Differentialquotienten: C2H6KINM
function dydt = c2h6kinrn(y) %Alle Operationen sind Matrix-Operationen. %Das Ziel ist, dydt = NR*r zu erzeugen. (NR Reaktionsrnatrix) %LNRH = NR < 0; LNR = LNRH.*abs(NR); Sollen vorher in der Workspace %berechnet werden. Die erste Anweisung setzt alle Werte kleiner %Null auf 1 und alle anderen auf Null. Die zweite erzeugt eine
3.4 Probleme und Losungen
87
%Matrix, in der n u r die urspruenglichen negativen Koeffizienten von %NR als Absolutwerte enthalten sind. global kh NR LNR %si=size(y); %if si(1) < si(2) %y=y’; %end xhn=(y*ones(l,49)).^LNR;
%erzeugt y(i,j)^abs(nue(i,j)) fuer i=1:23 und j = 1:49 xp=prod(xhn);%erzeugt das Produkt y(i)^abs(nue(i,j)) fuer j=1:49 %for j = 1:49 %ii=find(xhn( :,j)-1); %xp(j)=prod(xhn(ii,j)); %end r=kh.*xp; dydt =NR* r’ ; Die fette Zeile wurde vom Profiler zu 100 % fur die Rechenzeit von 0.02 Sekunden (fur einmaligen Aufruf!) verantwortlich gemacht und daraufhin durch die FOR-Schleife ersetzt, was die Rechenzeit auf 0 brachte, also unmefibar machte. Merkwurdigerweise war die Version mit der FOR-Schleife im MATLABFcn-Block mit Uber 6 Sekunden Rechenzeit wesentlich langsamer als die urspriingliche rnit etwa 2.5 Sekunden (s. das SIMULINK-Modell C 2 H 6 S Y S . M D L ; alle Voreinstellungen werden zweckmlfiig zusammengefafit ( c 2 ~ 6 -DAT)). Eine Compilierung zu einer S-Funktion erbrachte keine Verbesserung. Etwa genausoschnell wird die Ausfuhrung, wenn man die Parameter nicht global, sondern uber den Eingang iibergibt - andere Mtiglichkeiten erlaubt der Compiler nicht. Dann hat man zustitzlich die Aufgabe, den Eingangsvektor im Programm in seine Bestandteile zu zerlegen (s. C z H 6 S Y S d . M D L ) . Wenn man die Rechenzeiten mit denen in den beiden folgenden Aufgaben vergleicht, wird man dem oben gegebenen Ratschlag folgen, einen MATLA B-Fcn-Block so schlank wie mtrglich zu machen, wenn man nicht ganz auf ihn verzichten kann oder will. Der folgende Losungsvorschlag zielt in diese Richtung. Losungsvorschlag 2 Es werden nur die Geschwindigkeitsgleichungen in den MATLAB- Fcn-Block gepackt (sie lassen sich mit dem Hilfsprogramm CHEMDGL erzeugen, s. a. die Probleme 3.4.4 und 3.4.5). Eine entsprechende, auf die Verwendung in einem MA TLAB-Fcn-Block zugeschnittene Datei ist C 2 H 6 R A T E M , eingebunden in das SIMULINK-Modell C2H6-RATE-M.MDL. Dieses Model1 erreicht schon Rechenzeiten im Zehntelsekunden-Bereich und l a t sich durch Compilieren von C 2 H 6 R A T E M in eine S-Funktion noch einmal deutlich beschleunigen - die Schnelligkeit der Modelle in den beiden folgenden Aufgaben wird aber nicht erreicht.
88 3 Stachiometrie, Thermodynamik, Reaktionskinetik: Drei Saden der CRT
3.4.13 SIMULINK-Modell der Ethan-Spaltung rnit Fcn-Blocken (**, SE bedingt) Nahere Angaben zur Ethanspaltung finden Sie in Abschnitt 3.3.3. Die Aufgabe sol1 zeigen, daf) der Arbeitsaufwand mit Fcn-Blocken auch bei groaeren Reaktionssystemen ertrtiglich ist, wenn man die Moglichkeiten von MATLAB und SIMULINK geschickt nutzt. Hier kommt es darauf an, 49 Fcn -Blocke fur die Geschwindigkeitsgleichungenmit wenig Aufwand anzuordnen und zu besetZen. Man sollte eine Methode entwickeln, die wenig fehlertrachtig ist. Wem das Reaktionssystem zu groa ist, kann auch das folgende abgespeckte nehmen (SE):
C2H6 -+ 2 CH3. C2H6 CH3. + C2H5. + CH4 C2H5. + C2H4 + H. C2H5. + H2 C2H6 + H. CH3. + C2H5. + C3H8 CH3. + H. + CH4 C2H5. + H. t C2H4 + H2 2 C2H5. C2H4 + C2H6 2 H. H2
+
---f
--f
--f
Losungsvorschlag Man schiebe einen Fcn-Block in ein neues SIMULINK-Fenster, schreibe den Ausdruck kh()*u(]*u[]hinein und erzeuge ein Subsystem. In diesem Subsystem kopiert man den Biock sechsmal (oder auf 2, 4 und 8 und entfernt den letzten). Man schlieat das Subsystem-Fenster und kopiert es im Hauptfenster sechsmal. Dann offnet man nacheinander die Subsysteme und besetzt ihre Fcn-Blocke rnit den Reaktionsgleichungen, wie es in Abb. 3.17 zu sehen ist. Genauer gesagt: Man tragt die Nummer der Geschwindigkeitskonstanten in kh() ein und die Nummer der Komponenten in u[]. 1st nur eine Komponente beteiligt, loscht man den zweiten u[]-Eintrag; das Loschen geht schneller als das haufige Eintragen neuer u[]-Elemente. Um Fehlern vorzubeugen, kann man sich bei dieser Besetzung die entsprechenden Komponenten-Nummern und die zugehdrigen stochiometrischen Koeffizienten in einem MATLAB-Fenster parallel ausgeben lassen. Hier geschieht das durch Matrizen 21 bis r49: Sie geben mit den Ziffern die Reaktionsnummer an; die erste Zeile enthalt die Komponenten, die dritte ihre stochiometrischen Koeffizienten; die zweite wird in diesem Zusammenhang nicht benbtigt. (Es sei als gute Ubung empfohlen, entsprechende Angaben rnit den beiden Zeilen 1 und 3 aus der W - M a t r i x zu erzeugen; vergleichen Sie Ihre Losung dieses kleinen Teilproblems mit den Befehlen am Ende dieses Losungsvorschlags!) In Abb. 3.17 ist das erste Subsystem zu sehen und der geoffnete Fcn-Block Fcn4, der nach der in SIMULINK ublichen Bezifferung der fiinfte ist; im MATLAB-Fenster ist die Matrix 25 ausgegeben. Schliealich vervollstandigt man die Anordnung zu dem Model1 C2H6FCN, das in Abb. 3.18 zu sehen ist: Jedes Subsystem enthtilt sieben Fcn-Blocke mit den Geschwindigkeitsgleichungen.
3.4 Probleme und Losungen
89
Aus dem Mux-Block kommt der r-Vektor und wird im Matrix-Gain-Block mit der m - M a t r i x multipliziert. Die so erzeugten Differentialquotienten werden dem Integrator-Block zugefiihrt. Noch ein Wort zur Besetzung der Fcn-Bl6cke: Man sollte Potenzen als Produkte schreiben; bei Elementarmechanismen tritt keine h6here Potenz als zwei auf, und auch in der allgemeinen Massenwirkungskinetik wird dieser Wert nur selten ilberschritten werden. Der Grund ftir diese Empfehlung: Wenn Sie das in SIMULINK erlaubte Claret-Zeichen " verwenden, lauft das P r o g r a m zwar im normalen SIMULINK-Modus, aber Sie kunnen es leider nicht mit dem Akzelerator oder dem RTW umwandeln. Das ist ein Verstiumnis der Programmierer. Es gibt den Ausweg, ftir die Umwandlung alle Claret-Zeichen durch den COperator pow zu ersetzen, aber das kann in eine milhsame Arbeit ausarten, und zudem miissen Sie dann zwei Programm-Versionen verwalten.
Block name: Fcn4 Block type:
Fcn
I General expression block. Use "u" as the input variable name. Example: sin[u[l] * exp[2.3 * -u[Zl]]
I I
I
Expression:
Abbildung 3.17: Aufbau eines SIMULINK-Blockschaltbildes aus Fcn-Bl6cken. Nachtrag: Die Nummern der Komponenten und ihre stuchiometrischen Koeffizienten lassen sich z. B. mit den beiden folgenden Anweisungen aus der Ma-
90 3 Stt)chiometrie, Thermodynamik, Reaktionskinetik: Drei Siiulen der CRT trix RN erhalten: rni=fi nd( RN(5, :)) m i = 8 9 10 11 rne=RN(5,rni) me = -1 -1 1 1
Abbildung 3.18: Das SIMULINK-Model1 C2H6FCN.
3.4.14 SIMULINK-Model1 der Ethan-Spaltung mit S-Funktion (**) Fur die Ethanspaltung (Abschnitt 3.3.3) sol1 ein SIMULINK-Model1 erzeugt werden, das nicht mit Funktionsblocken arbeitet, weder mit M A TLAB-Fcnnoch mit Fcn-Blocken, sondern den S-Function-Block verwendet.
Losungsvorschlag Wer gelernt hat, mit S-Funktionen umzugehen, wird diese Variante von vornherein vorziehen. Schliei3lich leisten ja die chemischen Compiler CHECOMP2
3.4 Probleme und Lusungen
91
und CHEMDGL zusammen automatisch die Hauptarbeit, die Reaktionsgleichungen aufzustellen. Warum sollte man dann die relativ langsamen M A TLABFcn-Blircke benutzen oder sich die Arbeit mit der Besetzung vieler Fcn-Blbcke machen? Es ist vielleicht naheliegend, das gesamte DG1-System in eine S-Funktion zu packen und SIMULINK ,,nur " zur Ein- und Ausgabe und zur Online-Visualisierung zu benutzen, wie es an einigen Stellen diese Buches diskutiert wird. Ich sehe aber eine Variante, die mir noch ntiher am Ideal ,,schnell und bequem" zu liegen scheint: Man erzeugt nur den Vektor der Reaktionsgeschwindigkeitenin einer S-Funktion, setzt ihn d a m mit der Matrix NR in einem Matrix-Gain-Block um und fiihrt das Ergebnis, die Differentialquotienten, einem Integrator-Block zu. So vermeidet man, die Matrix-Vektor-Multiplikation NR r explizit in C durchfuhren zu mtissen. Den Ausgang des Integrator-Blocks, den Konzentrationsvektor, filhrt man dann zusammen mit dem Vektor der Geschwindigkeitskonstanten der S-Funktion zu. So werden in diesem Beispiel zu obungszwecken beide Arten der Parameterilbergabe an S-Funktionen benutzt: fiber den Eingang und iiber die Argumentenliste (Parameter siRN). Die Geschwindigkeitskonstanten kann man naturlich besser auch iiber die Argumentenliste ubergeben, oder noch besser: Man ubergibt iiber die Argumentenliste die Vektoren der Haufigkeitsfaktoren und Aktivierungsenergien, iiber den Eingang die Temperatur und berechnet die Geschwindigkeitskonstanten im Programm - so ist man auch filr den nichtisothermen Fall bestens geriistet. Im folgenden wird die gesamte S-Funktion ausgegeben, urn demonstrieren zu kGnnen, wie einfach es selbst fiir ungeiibte C-Programmierer ist, die MusterFiles anzupassen; die eigenen Eintrtige sind fett markiert:
/'*
* SFUNTMPL Template C S-function source file. * * Copyright (c) 1994 by The Mathworks, Inc. * All Rights Reserved */ /* * The following #define is used to specify the name of your S-Function. *
* You should change the define to include the name of your S-function. *I #define S-FUNCTION-NAME
c2h6rate
/* * Need to include simstruc.h for the definition of the SimStruct and * its associated macro definitions. *I #include "simstruc.h" #define siRN ssGetArg(S,O)
/*
* mdlInitializeSizes - initialize the sizes array
92 3 Stdchiornetrie, Thermodynamik, Reaktionskinetik: Drei Siiulen der CRT
* * The sizes array is used by SIMULINK to determine the S-function block’s
* characteristics */
(number of inputs, outputs, states, etc.).
static void mdlInitializeSizes(SimStruct *S)
{ #define NOUTPUTS mxGetScalar(siRN) ssSetNumContStates( S, 0);/* number of continuous states */
ssSetNumDiscStates( S,0); /* number of discrete states */ ssSetNumInputs( S,DYNAMICALLY-SIZED); /* number of inputs */ ssSetNumOutputs( S, NOUTPUTS); /* number of outputs */ ssSetDirectFeedThrough(S, 1);/* direct feedthrough flag */ ssSetNumSampleTimes( S, 1);/* number of sample times */ ssSetNumInputArgs( S, 1);/* number of input arguments */ ssSetNumRWork( S, 0); /* number of real work vector elements */ ssSetNumIWork( S, 0); /* number of integer work vector elements */ ssSetNumPWork( S,0); /* number of pointer work vector elements */
1
/* * mdlInitializeSampleTimes *
- initialize the sample times array
* This function is used to specify the sample time(s) for your S-function. * If your S-function is continuous, you must specify a sample time of 0.0.
* Sample times must be registered in ascending order. If your S-function * is to acquire the sample time of the block that is driving it, you must * specify the sample time to be INHERITED -SAMPLE-TIME.
*/
static void mdlInitializeSampleTimes(SimStruct *S)
{
ssSetSampleTimeEvent(S, 0, INHERITED -SAMPLE-TIME); SsSetOffsetTimeEvent (S, 0, 0.0) ;
/* * SET OTHER SAMPLE TIMES AND OFFSETS HERE */
1
I* * mdlInitializeConditions - initialize the states * * In this function, you should initialize the continuous and discrete * states for your S-function block. The initial states are placed * in the x0 variable. You can also perform any other initialization
* activities that your S-function may require. */
static void mdIInitializeConditions(doub1e *xO, SimStruct *S)
{
3.4 Problerne und Ltrsungen
I* * YOUR CODE GOES HERE *I
1
I* * mdlOutputs - compute the outputs * * In this function, you compute the outputs of your * block. The outputs are placed in the y variable. *I
S-function
static void mdlOutputs(doub1e *y, double *x,double *u, SimStruct *S, int tid)
{
I* * YOUR CODE GOES HERE *!
int i, nOutputs, nOut2, nInputs; double c[lOO]; nOutputs = ssGetNumOutputs(S); nInputs = ssGetNumInputs(S); nOut2 = nInputs nOutputs; for (i = 0;i < nOut2; i++) { c[i] = u[i nOutputs];
-
+
1 ** (Y+O)
= u[O]*c[O]; ( Y + l ) = u[l]*c[2]; * (Y+2) = u[2]*c[2]; * (Y+3) = u[3]*c[5]; * (Y+4) = u[4]*c[7]*c[8]; * ( ~ 4 - 5 )= u[5]*c[O]*c[8]; * (y+6) = u[6]*c[l]*c[7]; * (Y+7) = u[7]*c[O]*c[l]; * (y+8) = u[8]*c[3]*c[7]; * (Y+9) = u[9]*c[9]; *(y+10) = u[10]*c[3]; * ( y + l l ) = u[ll]*c[6]; * (y+12) = u[12]*c[4]; * (y+13) = u[13]*c[4]; *(y+14) = u[14]*~[14]; * (y+15) = u[15]*c[14]; * (y+16) = u[16]*c[16]; *(y+17) = u[17]*c[16]; *(y+18) = u[l8]*~[17]; *(y+19) = u[19]*c[17]; *(y+20) = u[20]*c[17]; *(y+21) = u[21]*~[8]*c[13];
93
94 3 Sttrchiometrie, Thermodynamik, Reaktionskinetik: Drei Sliulen der CRT
* (y+22) = ~[22]*c[7]*c[8]; * (y+23) = u[23]*c[8]*c[12]; * ( ~ + 2 4 )= u[24]*c[8]*c[15];
* (y+25)
= u[25]*c[l]*c[7]; = u[26]*c[7]*c[9]; * (y+27) = u[27]*c[3]*c[7]; * (y+28) = u[28]*~[3]*c[12]; * (yf29) = u[29]*c[4)*c[7]; * (y+30) = u[3O]*c[8]*c[9]; *(y+31) = u[31]*c[3]*c[8]; * (y+32) = u[32]*c[6]*c[8]; * (y+33) = u[33]*c[4]*c[8]; * (y-4-34) = u[34]*c[8]*c[14]; * ( ~ 4 - 3 5 )= u[35]*c[8]*c[16]; * (y+36) = u[36]*c[8]*c[17]; * (y+37) = u[37]*c[l]*c[l]; * (y+38) = u[38]*c[l]*c[3]; *(y+39) = u[39]*c[l]*c[6]; * (y+40) = u [40]*c[11*c[141; * (y+41) = u[41]*c[9]*c[9]; * ( ~ + 4 2 )= u[42]*c[9]*c[14]; * (y+43) = u[43]*c[3]*c[3]; * (y+44) = u[44]*c[3]*c[3]; * (y+45) = u[45]*c[3]*c[14]; * (y+46) = u(46]*c[6]*c[14]; * (y+47) = u[47]*c[14]*c[14]; * (y+48) = u[48]*c[13];
* (y+26)
}
I* * mdlUpdate - perform action at major integration time step * * This function is called once for every major integration time step. * Discrete states are typically updated here, but this function is useful * for performing any tasks that should only take place once per integration * step. *I
static void mdlUpdate(doub1e *x, double *u, SimStruct *S, int tid)
{
I* * YOUR CODE GOES HERE *I
1
I* * mdlDerivatives - compute the derivatives * * In this function, you compute the S-function block’s derivatives.
3.4 Probleme und Losungen
95
* The derivatives are placed in the dx variable. */ static void mdlDerivatives(doub1e *dx, double *x, double *u, SimStruct *S, int tid)
{
/* * YOUR CODE GOES HERE */
1
/* * mdlTerminate - called when the simulation is terminated. * * In this function, you should perform any actions that are necessary * at the termination of a simulation. For example, if memory was allocated * in mdlInitializeConditions, this is the place to free it. */
static void mdlTerminate(SimStruct *S) f
I* * YOUR CODE GOES HERE *I
1
#ifdef MATLAB-MEX-FILE /* Is this file being compiled as a MEX-file? */ #include ”simu1ink.c” /* MEX-file interface mechanism */ #else #include ”cg-sfun.h” /* Code generation registration function #endif
*/
r = r(c)
Integrator
Gain
L
*
yout 1 To Workspace
DGI-System der CPHG-Spaltung info
Abbildung 3.19: SIMULINK-Modell C 2 H 6 S F U N (s. Text).
96 3 Sttichiometrie, Thermodynamik, Reaktionskinetik: Drei Saulen der CRT Die etwas sperrig aussehenden Eingabeanweisungen sind in Anlehnung an andere Muster-Files geschrieben. Das Gleichungssystem zur Berechnung der Reaktionsgeschwindigkeiten r bzw. *y im UP static void mdlOutputs wurde natiirlich nicht geschrieben, sondern entstand mit ,,Suchen und Ersetzen '' aus dem mit CHEMDGL erzeugten System r = kh c. Im ubrigen handelt es sich hier um eine level 1 S-function,die noch aus der Zeit von SIMULINK 1 . 3 stammt; ~ sie laat sich aber auch unter MATLAB 5.x (und in der SE!) compilieren und verwenden. Das iibersetzte Programm ist eingebunden in dem SIMULINK-Model1 C 2 H 6 S F U N (Abb. 3.19).
3.4.15 Einfaches System aus nichtlinearen algebraischen und Differential-Gleichungen (DAE- oder DAG1-System) (*) Es folgen drei Reaktionen mit ihren Geschwindigkeitsgleichungen:
+
(1) A S 3B C, unendlich schnell, K , = 1 (2) C S D , r = 1OOc$ - 1OOc$ (3) D + El T = I C D Es sollen die Konzentrations-Zeit-Kurven der Komponenten im Batch-Reaktor berechnet werden (idealer Reaktor, Reaktionsvolumen konstant), wenn fur A eine Konzentrationseinheit vorgelegt wird (c: = 1). Losungsvorschlage Ein moglicher Weg ist, DGls fur D und E anzusetzen und Reaktion (1) als vorgelagertes Gleichgewicht zu behandeln. global A0 A B C D E AO=l;B=0.5;D=O;E=O; % B ist ein Schatzwert fur die folgende Gleichgewichtsberechnung% %Startwert von B berechnen: B=fmins( 'a bcdegl' ,B) B =
1.1641
UP fur den DG1-Loser odel5s: ABCDE
function dc = abcde(t,c) global A0 A B C D E D=c( l);E=c(2); B=fmins('abcdegl',B);
3.4 Probleme und Losungen
97
dc( 1)=1OO*C 2-100*~(1)"2; dc(2)=l*c( 1); dc=dc'; A
U P far
ABCDE:
ABCDEGL
function f = abcdegl(x) global A0 A B C D E B=x; A= (3*AO-x)/3; C=AO-A-D-E; f=(xA3*C/A-1)^2; tic; [t,y]=odel5s( 'a bcde', [O; 11,[O;O]);toc elapsed-time = 3.1570e+000 y enthalt die Konzentrationen von D und E. Die dazugehijrigen Konzentrationen von A, B und C werden mit dem folgenden Programm berechnet: ABCDEABC
global A0 A B C D E si=size(y);sil=si( 1); a =zeros(si 1,I); b=zeros( sil, 1); c=zeros(sil,l); for i = l : s i ( l ) D=y(i, 1);E=y(i,2); B=fmins( 'abcdegl' ,B); b(i)=B;a(i)=A;c(i)=C; end
In den Diagrammen der folgenden Abb. 3.20 sind die Ergebnisse grafisch dargestellt. Die Rechenzeit ist selbst mit odel5s doch schon relativ lang, besonders wenn man bedenkt, dai3 man mindestens bis 5 Sekunden rechnen m d t e statt wie hier geschehen nur bis 1 Sekunde. Ein SIMULINK-Modell (Abb. 3.21) wird vermutlich auch in diesem Falle schneller sein. Man mufl sich allerdings etwas einfallen lassen, um die nichtlineare Gleichung zu h e n : Dazu benutzt man am besten eine an sich in SIMULINK verponte algebraische Schleife, die man in den alteren Versionen wie abgebildet konstruieren kann, in den neueren mit Hilfe des Algebraic-Constraint-Blocks. Man erhtilt in jedem Fall eine Warnung Uber die Schleife, aber die Rechenzeit laflt sich drastisch reduzieren.
98 3 Sttkhiometrie, Thermodynamik, Reaktionskinetik: Drei SBulen der CRT
0‘
0
1.0002 I
0.5
1
I
0.5
’0B999O .
1
Abbildung 3.20: Konzentrationsverlauf im DAG1-System. Ordinaten (oberc Bilder): Konzentrationen, Abszissen: &it, beide in konsistenten Einheiten. Oberes linkes Teilbild: - D, - - E, oberes rechtes Teilbild: - A, - - B, . . C. c3 cc. Unteres linkes Teilbild: Gleichgewichtsbeziehung zwischen A, B und c: +, Sollwert ist K, = 1
Algebrakche Schleife fCr B
Integrator
I I
t-cn
Miiv
I
I
I dD/dt
Fcn2
DC
Mux3
13 Parameter
Abbildung 3.21: SIMULINK-Model1 fur das DAG1-System.
To Workspace
3.4 Probleme und Losungen
99
tic;[t,y]=sim( 'abcdesys');toc elapsed-time = 1.2500e-001
Die Integrationszeit war hier auf 5 Sekunden eingestellt, nicht auf 1 Sekunde wie beim obigen MATLAB-Modell, das dafilr schon iiber 3 Sekunden Rechenzeit benotigte. Ohne den Scope-Block ist die Rechenzeit mit 4.7000e-002 s noch kiirzer. Solche geringen Zeiten werden allerdings vom Rechner nicht mit groaer Genauigkeit ermittelt. In diesem speziellen, einfachen Beispiel kbnnte man natiirlich die nichtlineare algebraische Gleichung umgehen: Man setzt sie als schnelle Reaktion an, die im gesamten Bereich im Quasi-Gleichgewicht bleibt. Dazu mui3 man die Geschwindigkeitskonstanten filr Hin- und Riickreaktion groa genug ansetzen, aber auch nicht iibertrieben groi3, um eine zu hohe Steifheit zu vermeiden. Dieser Ausweg kann bei groaeren Reaktionssystemen sehr schwierig werden, da sich die Steifheit nichtlinearer Systeme im Zeitverlauf stark andern kann. Wir miissen auch bedenken, daa z. B. algebraische Ausdriicke fiir Stoff- oder Warmeiibergang so iiberhaupt nicht umgangen werden konnen. Deshalb ist es angebracht, sich etwas genauer mit DAG1-Losern zu beschaftigen. Solche DAG1-Loser stellt SIMULINK allerdings nicht zur Verftigung (wohl aber MATLAB a b Version 5.3, mit Einschrankung). Man muB sie sich aus anderen Bibliotheken besorgen und kann sie in SIMULINK einbinden (Problem 4.4.5). Dieses Buch zeigt noch einen anderen Weg auf: Man formt die DAGls in DGls um, was uns an mehreren Stellen beschaftigen wird.
Aus technischen Gründen bleibt diese Seite leer
Kapitel 4
Ruhrkesselreaktoren Riihrkesselreaktoren werden kontinuierlich, absatzweise oder im Teilflieflbetrieb betrieben; ubliche Abkiirzungen sind CSTR (continuous starred tank reactor) BR (batch reactor oder Batch-Reaktor) sowie SBR (semibatch reactor oder Semibatch-Reaktor). Wir beginnen mit dem BR, der sich am besten an das vorhergehende Kapitel anschlieflt, entwickeln aber vorher die Stoff- und Energiebilanzen in einer Form, die sich auf alle Betriebsweisen anwenden ltiflt. Die Formulierung einer Stofiilanz ist relativ unproblematisch:
Die sog. Warmebilanz sollte besser thermische Energiebilanz oder Enthalpiebilanz genannt werden. Die Erfahrung lehrt, dafl die unkommentierte Formulierung einer ,,Wtirmebilanz" Verwirrung stiften kann; sie ist gar nicht erlaubt, schliefllich ist die Wtirme keine Zustandsgrofie. Was iiblicherweise als Wtirmebilanz angegeben wird, ist in Wahrheit das Ergebnis einer Enthalpiebilanz, die fur den idealen Riihrkessel lautet:
Wir multiplizieren jetzt die Stofiilanz mit H i , summieren iiber i und ziehen das Ergebnis von der Enthalpiebilanz ab; wir erhalten:
Die Summierungen im letzten Term kann man umstellen:
102 4 Riihrkesselreaktoren Der rechte Ausdruck ist nichts anderes als C r j ( A H T ) j V . Damit ergibt sich zunachst:
Wir setzen nun ein
(4.6) und erhalten:
Dabei ist
die mittlere Molwarme der Komponente i im Zulauf zwischen T o und T . Damit haben wir die ,,Warmebilanz" fur den idealen (homogenen) Riihrkessel abgeleitet. Wenn man sich dieser Ableitung bewuflt ist, darf man sie auch, dem allgemeinen Gebrauch folgend, Warmebilanz nennen; man wird nicht in Versuchung kommen, sie durch Einbeziehen von Faktoren in die Differentialquotienten zu ,,verschlimmbessern Wenn man die Summierungen in der Warmebilanz G1. (4.7) durchfiihrt und nicht molare, sondern Masse-Einheiten verwendet, kommt man auf die iiblichere Form
"'.
dT dt
.o-
mc - = - m
C;(T
- TO) - h
' (~ T,O)
+CTj(-n~&v
(4.9)
zu der es natiirlich auch eine Reihe von Varianten gibt. In der Warmebilanz ist h' ein modifizierter Warmedurchgangskoeffizient, der von der Art der Kiihlung abhangt: 0
Bei Siedekuhlung oder gleichartigen Sonderfallen, ftir die To= T, = const angesetzt werden darf, ist
h' = hF,
'
(4.10)
Das htaben selbst einige sehr gnte Mitarbeitcr vcrsucht, irregeleitet durch die ungcntlgende Darstellurig in den meisten LehrbUctierri!
4.1 Batch-Reaktor 0
103
Bei konvektiver Mantelkiihlung, wenn der Kuhlmantel als stationarer idealer CSTR behandelt werden darf, ergibt sich:
(4.11) 0
Bei Kuhlschlangen oder tihnlichen, dem Kiihlaggregat durch die Konstruktion vorgeschriebenen Stramungswegen, die als Pfropfstrtjmung angesehen werden durfen, erhtilt man:
h' = (vpcP),(l- exp(--
hFc
1)
(4.12)
("PCP)C
4.1 4.1.1
Batch-Reaktor Stoff- und Energiebilanzen
Stoff- und Warmebilanz ergeben sich aus den allgemeinen Bilanzen:
dni =c v i j r j v
dt Die Warmebilanz sei wie folgt formuliert: dT
(4.13)
1 +c~j(-AH,)j
h'
- = -(T
(4.14) dt pc,V PCP Wenn Dichte oder Volumen nicht konstant sind, mui3 man zusgtzliche Gleichungen ansetzen, z. B. bei veraderlicher Dichte: - T,O)
df _
dt dV _
8 p dni
m - ~~~
+--dd Tp dd Tt
(4.15)
(4.16) dt Die Masse m ist im BR konstant. Das darf man aber nicht zu streng nehmen: Wenn beim Fullen oder Leeren schon Reaktionen ablaufen, die man beriicksichtigen mui3, wird immer noch von einem Batch-Betrieb gesprochen; wir werden ein solches Beispiel noch kennen lernen. Es ist i. a. kein Problem, numerische Losungen fur die vorstehenden Bilanzgleichungen zu gewinnen, wir kannen im Prinzip so vorgehen wie im Abschnitt 3.3 und die DG1-Laser von MATLAB einsetzen; die Warmebilanz ist auch nur eine zusatzliche, allerdings besonders stark nichtlineare DG1. Es konnen aber in realistischen Problemen leicht vertrackte Schwierigkeiten auftreten, wie der nachste Abschnitt zeigen wird; wir werden sehen, wie wir sie mit MATLAB und SIMULINK meistern konnen.
2
104 4 Riihrkesselreaktoren
4.1.2
Beispiel: Zweistufiger ProzeD (DAG1-Systeme mit Unst etigkeiten)
Als Vorlage fiir diesen Abschnitt dient ein technischer Produktionsprozefl, bei dem zwei verschiedene Katalysatoren eingesetzt werden; aus diesem Grund wird er auch zweistufig durchgefiihrt: In dem ersten Kessel wird am ersten Katalysator eine Vorstufe erzeugt, in den zweiten Kessel iibergefuhrt und dort am zweiten Katalysator zum Endprodukt umgesetzt; diese Operationen wiederholen sich im Takt. Es ist ein relativ komplexer Prozefl, der hier in allgemeiner Form bis auf die charakteristischen Eigenschaften abgemagert dargestellt wird, soweit sie aus numerischer Sicht interessant erscheinen. Es laufen eine Reihe von Reaktionen mit ganz unterschiedlichen Zeitkonstanten ab; einige sind so schnell, dafl sie praktisch immer im Gleichgewicht sind. Wir erfassen dieses Reaktionsspektrum beispielhaft durch drei Grundtypen: eine sehr schnelle, eine schnelle und zwei langsame Reaktionen, die zweite langsame fur die Umsetzung in der zweiten Stufe: 1. Stufe:
A Z 3B + C
(sehr schnell)
(4.17)
(schnell)
(4.18)
D -+ E (langsam)
(4.19)
E
(4.20)
2C 2 2 0
2. Stufe: +F
(langsam)
Wir werden uns schrittweise mit den interessanten Problemen beschaftigen, die in diesem System auftreten; dabei wollen wir nicht vergessen, dafl es stellvertretend fur Systeme steht, die sehr vie1 mehr Reaktionsschritte enthalten konnen, und bei denen die Uberggnge von ,,sehr schnell" zu ,,langsam" flieflender sein konnen. Auch hier gilt: Methoden, die zur Losung kleiner Systeme taugen mogen, miissen nicht gleich gut oder vielleicht auch gar nicht zur L 6 sung grofler Systeme geeignet sein. Wir wollen daher nicht den Fehler machen, nur auf der Stufe der einfachen Lehrbeispiele stehenzubleiben. Wir beginnen mit der ersten Prozeflstufe und setzen fur den isothermen BR an (konstantes Volumen und konstante Dichte vorausgesetzt): c3 c B C = K1 CA
(4.21)
4.1 Batch-Reaktor
105
(4.22)
(4.23) also mit Massenwirkungskinetik formuliert ; dazu kommen die Anfangsbedingungen. Es handelt sich um ein System von zwei DGls und einer algebraischen Gleichung, ein sog. DAG1-System (DA-System, DAE system, s. a. Abschnitt 3.4.15). Losungsmoglichkeiten ftir ein solches DAG1-Systems werden in den Problemen 4.4.1 bis 4.4.3 vorgestellt. In Problem 4.4.3 wird das DAG1-System durch Differentiation der algebraischen Gleichgewichtsbeziehung in ein DG1-System iibergefiihrt; diese Methode ist unmittelbar mit dem Index eines DAG1-Systems verknupft, einer wichtigen GroBe, die einige allgemeinere Ausftihrungen verdient. Das Folgende h< sich eng an [lo]. Betrachten wir ein DAG1-System in allgemeiner Form:
(4.24)
(4.25)
0 = g ( x ,Y 4
Wenn wir die letzte, algebraische Gleichung nach t differenzieren, erhalten wir: d g d x + -a g d y = -dg --
dx dt
c3y dt
dt
(4.26)
Wenn die Jacobi-Matrix nicht-singular ist, bilden G1. (4.24) und G1. (4.26) ein (implizites) DG1-System, und das ursprungliche DAG1-System hat den Index eins. 1st dagegen die Jacobi-Matrix singulsr, kbnnen wir versuchen, das Gleichungssystem, das durch die erste Ableitung entstand, durch geeignete algebraische Manipulationen wieder auf die allgemeine Form eines DAG1-Systems zu bringen und den algebraischen Teil erneut zu differenzieren. 1st die dann entstandene Jacobi-Matrix nicht-singultir, hat das urspriingliche DAG1-System den Index zwei; sonst miissen wir weiter fortfahren, bis wir d y l d t als kontinuierliche Funktion von y und t erhalten: Die Anzahl der dazu erforderlichen Differentiationen geben den Index des ursprtinglichen DAG1-Systems an. Dieses Verfahren kann gelegentlich niitzlich sein, wird aber nicht als Losungsweg fur DAG1-Systeme mit hoherem Index empfohlen. Hinsichtlich der Probleme, die bei einem Index grd5er als eins auftreten kbnnen, mui3 auf das Schrifttum verwiesen werden; wir beschranken uns hier auf DAG1-Systeme mit Index eins.
106 4 Rtihrkesselreaktoren MATLAB bietet ab der Version 5.3 eingeschrankte Hilfe fur DAG1-Systeme an, aber nicht SIMULINK. Die Benutzung eines externen DAG1-Losers in SIMULINK erfordert schon einen nicht einmal in der Dokumentation bekannten Trick, der in Problem 4.4.5 vorgestellt wird. Der gesamte Produktionsprozei? zur Herstellung des Produkts F nach den Reaktionen Gln. (4.17) bis (4.20) sol1 folgendermaflen gefuhrt werden: Die Komponente A wird einem isothermen BR mit vorgelegtem Katalysator (Vlmin) bei Reaktionstemperatur zugefiihrt, wobei sie diese Temperatur ohne merkliche Verzogerung annimmt, mit anderen Worten: schon in der Filllphase zu reagieren beginnt. Der Kessel wird bis zu einer maximalen Fiillhohe Vlmax gefullt, d a m wird gewartet, bis das Zwischenprodukt E einen vorgegebenen Wert Emax erreicht hat. 1st das der Fall, wird der Kesselinhalt ohne Katalysator bis auf einen Rest Vlmin in den zweiten Kessel ilbergefilhrt und der erste Kessel unmittelbar anschlieaend erneut gefilllt filr den nachsten Takt. Im zweiten Kessel reagiert nur E (an einem anderen Katalysator) zum gewiinschten Produkt F; sobald eine Menge Fmax erreicht ist, wird die Reaktionsmasse aus dem zweiten Kessel bis auf eine Rest V2min abgezogen; der Kessel kann erneut gefullt werden. Die Unstetigkeiten kommen also durch das Ein- und Abschalten der Pumpen, die das Fullen und Leeren der beiden Kessel im abgestimmten Takt besorgen; die Volumenstrbme betragen v0 fur das Fullen des ersten Kessels, v2 fur das Leeren des zweiten Kessels und v12 filr die Uberfuhrung vom ersten in den zweiten Kessel. Diese Daten sind zusammen mit anderen Angaben im File TOSTAGE - DAT-B enthalten: TOSTAGE-DAT-B Emax=0.97; Fmax=0.95; cAzu=l; %kmol/m3 V10=0.01;V20=0.01; %m3 Vlmin=O.O1;V2min=O.O1; vlvoll=1;v2voll=l; vO=le-03;~12=~e-03;~2=1e-03; %m3/s k2=100; k2r=100; k3=l;k4=le-3; %Die folgenden Anfangsbedingungen sind aus einem FORTRAN-Programm ubernommen; die Zuordnung ist weiter unten gegeben.% YO(2) = 1.D-2; YO( 1) = 2/3*Y0(2); YO(4) = O.ODO; YO(5) = O.OD0; YO(6) = O.ODO; YO(7) = O.ODO; YO(8) = 0.01DO; YO(9) = 0.01DO; YO(3) = YO(8)"3*YO(l)/Y0(2)'3; Auf den ersten Blick mag es einfach erscheinen, diese Aufgabe zu losen: Man setzt die Bilanzgleichungen an und wahlt eins der in den oben genannten
4.1 Batcb-Reaktor
107
Problemen besprochenen Lbsungsverfahren fiir DAGls. Das sollten Sie auch tun, schon um sich a n den uberraschungen zu erfreuen, die bei den meisten Implementierungen auf Sie warten. Die Bilanzgleichungen werden erglinzt durch Schaltbedingungen fiir die Pumpen, die das F dlen und Leeren der Kessel im Produktionszyklus besorgen. Die Bilanzgleichungen richten sich natiirlich danach, ob man die erste Reaktion als Gleichgewicht behandeln will (echtes DAG1-System) oder als sehr schnelle Reaktion. Wenn man die erste Mtrglichkeit wtihlt, was wir fiir das folgende tun wollen, bieten sich fiir die Berechnung von nB und n c wiederum zwei Mbglichkeiten an: 1. Moglichkeit: ,,B“-Bilanz: d -(3n~ dt
nB + nB) = 3wOcAzu - w12(3-nA v1 + -)v1
(4.27)
Entsprechend die ,,C“-Bilanz. 2. Moglichkeit: ,,B“-Bilanz:
0 = 3CAZU v1- 3n.4 - 7
2 ~
(4.28)
Entsprechend die ,,C“-Bilanz. Mit der ersten Mbglichkeit ergibt sich folgendes Gleichungsystem, dessen rechte Seiten hier der Einfachheit halber in einer FORTRAN-Codierung wiedergegeben ist:
- 1.DO F(1) = Y(2)**3*Y(3)/Y(l)/Y(8)**3 F( 2) = VO*~.DO*CAZU -v12/Y (8)* (3.DO*Y(1)+Y (2)) F(3) = vO*cAzu - ~12/Y(8)*(Y (1)+Y (3)+Y (4)+Y( 5)) F(4) = 2.DO/Y (8)* (k2*Y(3)**2 - k2r*Y (4)**2) -k3*Y(4) -v12*Y (4)/Y (8) F(5) = k3*Y(4)-~12*Y (5)/Y( 8) F(6) = -k4*Y(6)+~12*Y(5)/Y(S)- ~2*Y(6)/Y(9) F(7) = k4*Y(6)-v2*Y(7)/Y(9) F(8) = v0-v12 F(9) = v12-v2 Dabei bedeuten: Y(l)=A (fiir nA), Y(2)=B, Y(3)=C, Y(4)=D, Y(5)=E, Y(6)=E2 (d. h. E im 2. Kessel), Y(7)=F, Y(8)=V1, Y(9)=V2. Damit erhalten wir folgendes Gleichungssystem:
B dY -=F dt
(4.29)
mit einer sparsen mass mat& B, in der nur besetzt sind: die Diagonalelemente von (2,2) bis (9,9) sowie B(3,1), B(3,4) und B(3,5) jeweils mit 1 und B(2,l) mit 3.
108 4 Riihrkesselreaktoren Die Schalter fiir die Pumpen beruhen auf folgenden Bedingungen, in FORTRAN als Pseudo-Code gegeben: IF IF IF IF IF
(Y(7).GE.FMAX) v2= 1.D-03
(V2.LE.V2MIN) v2=0. (Y(5) .GE.EMAX.AND.V2.LE.V2MIN) v12=1 .D-03 (V1.LE.VlMIN) v12=0. (V1.LE.VlMIN) vO= 1.D-03 IF (V1.GE.VlVOLL) vO=O.
Implizit sind noch einige andere Voraussetzungen enthalten: Z. B. darf Emax nicht schon wghrend des Ftillens erreicht werden, was allerdings eine sehr schnelle Reaktion erfordern wtirde. Die dritte Abfrage kann noch um den zweiten Term gekiirzt werden, wenn die zweite Stufe schneller ablauft als die erste: Dann ist der zweite Kessel schon geleert (V2 <= V2min), wenn der erste zur ubergabe bereit ist. (Das ist in diesem Simulationsbeispiel so, im Realfall sollte man eine automatische Steuerung besser nicht auf eine solche Annahme stiitzen!) Es sieht so aus, als sei ein DAGI-Loser wie LIMEX, implementiert in einer S-Funktion, eine geeignete Wahl, da er auf Gleichungssysteme wie G1. (4.29) zugeschnitten ist. Das wiirde auch stimmen, wenn nicht das Problem mit den Unstetigkeiten wgre. An diesem Problem scheitern alle LGsungsverfahren, die fur diese Aufgabe ausprobiert wurden, einige von vornherein, andere schaffen wenigstens einen oder sogar einige Zyklen, was aber in nicht vorhersehbarer Weise abhangt von den Urnstanden wie Gleichungssystem, Parameter, FehlertoleranZen usw. So ganz iiberraschend ist das nicht, schliefilich setzen die Ordnungsoder Schrittweitensteuerung der Loser eine gewisse Mindestdifferenzierbarkeitsordnung voraus, die an den Unstetigkeitsstellen nicht gegeben ist. Es mufi also Vorsorge getroffen werden, dai3 ein Loser, anschaulich gesprochen, nicht auf der Suche nach der ngchsten Schrittweite schon uber eine Unstetigkeitsstelle hinweg einen Schalter bedient, dann aber mit dem tatsachlichen nachsten Schritt vor dieser Stelle bleibt. Eine solche Vorsorge trifft SIMULINK mit seinem zero crossing detection. Wir machen also SIMULINK zu einem DAG1-Loser, entweder indem wir die Gleichgewichtsbedingung durch geniigend schnelle Reaktionen ersetzen oder - genereller - indem wir das totale Differential der algebraischen Gleichungen bilden, so wie es im Text beschrieben und im Problem 4.4.3 angewendet wurde. Fiir unser Gleichungssystem (4.29) bedeutet das, die erste Gleichung, die Gleichgewichtsbedingung F(l ) , umzuwandeln in d F ( l ) / d t = 0, so daf3 also die erste Zeile der Matrix B nicht nur Nullen enthglt, sondern folgende Eintrage, codiert in MATLAB:
B(1,l
:
3) = Y(2)^3* Y ( 3 ) / Y ( l ) / Y ( 8 ) ^ 3*
*[-1/Y(1)! 3/Y(2), 1/Y(3)1; B(1,8) = -Y(2)^3 * Y ( 3 ) / Y ( l ) / Y ( 8 ) ^ 3* 3/Y(8);
3
(4.30) (4.31)
Damit ist B nicht-singular, und wir konnen die Ableitungen = B-lF bilden und einen DG1-Loser verwenden. In SIMULINK wurden wir dieses Produkt
4.1 Batch-Reaktor
109
in einer C MEX-file S-function berechnen, wenn die Rechengeschwindigkeit bedeutsam ist; hier im Ltjsungsvorschlag, in dem das Hauptaugenmerk auf den Unstetigkeiten liegt, wird aus Bequemlichkeit ein MATLAB-Fcn-Block verwendet, um die Matrix B zu invertieren; die Multiplikation mit F wird mit SIMULINKBlocken durchgefiihrt, dem Prinzip folgend: wenn schon ein MATLA B-FcnBlock, dann nur die unumgbglichen Rechnungen. Die Datei ABCDEF-Bzeigt die Berechnung der Inversen, die als Vektor ausgegeben werden m d : ABCDEF-B function Bvektor = abcdef-B(Y) B=zeros(9,9); B( 1,1:3)=Y( 2) 3*Y( 3)/Y( 1)/Y(8) 3*[-1/Y( 1),3/Y( 2), 1/Y (3)]; B( 1,8)=-Y (2) 3*Y( 3)/Y( 1)/Y(8) 3*3/Y(8); for i = 2:9 B(i,i)=l; end B(2,1)=3; B(3,l) =1;B(3,4)= 1;B( 3,5)=1; Binv=inv( B); BinvT=Binv'; Bvektor=BinvT( :); A
A
A
Die Multiplikation mit dem in Fcn-Blocken erzeugten Vektor F kann man sehr schnell modellieren, wenn man einen Dot-Product-Block mit den n6tigen Verbindungen versieht und dann Kopien zwischen einen Demux- und einen MuxBlock heftet, wie es im Endergebnis das Subsystem aus dem SIMULINK-Modell ABCDEF-B-SYS.MDL in Abb. 4.1 zeigt. Sie sollten nun einen Blick auf die Programmierung der Schalter fiir die Pumpen werfen. Wenn Sie in dem gleichnamigen Block eins der drei Subsysteme offnen, sehen Sie, d d die Abfragen durch logische Ausdriicke in FcnBlocks gemacht werden; die eigentlichen Schalter sind eine Kombination aus S(et)-R(eset)-Flip-Flop- und Switch-Blbcken. Um die Programmierung des SR-Flip-Flop-Blocks zu sehen und seine Wirkungsweise zu verstehen, ktjnnen Sie ihn demaskieren: ausw&hlen, dann im Menii Edit auf Look under mask klicken; der Logic-Block dort zeigt auf Doppelklick die truth table. Diese truth table mllssen Sie sich noch erggnzt denken um die lexikografisch angeordneten Kombinationen der Zustgnde 1 und 0 der drei Eingangsgrofien zu der vollsttindigen Wahrheitstafel in Tab. 4.1. Zero crossing detection betreibt der Switch-Block. Zur Vorsicht ktjnnte man die Abfragen statt iiber Fcn-Bl6cke iiber Relational- und Logical-OperatorBlocke machen, denen ebenfalls zero crossing intrinsisch ist. Ohne zero crossing detection lauft wenig: Sie kbnnen sich davon iiberzeugen, indem Sie es im Menu Simulation/Parameters/Diagnostics auschalten (disable).
110 4 Rilhrkesselreaktoren
* Goto
r
=~z-----~ Dot Product2
@-In-1
Demux
= -
4
-*o 0ut-1
Dot Product4
From5
Dot Product8
Demux
From8
Abbildung 4.1: Produkt B-'F im SIMULINK-Model1 ABCDEF-B-SYSdes Zwei-Stufen-Prozesses.
0 0 0 1 1 1 1
0 1 1 0 0 1 1
1 0 1 0 1 0 1
0 1 0 1 0 1 1
1 0 1 0 1 0 0
4.2 Semibatch-Reaktor 111
Wenn Ihnen nun die Simulation mit ABCDEF-B-SYSzu langsam erscheint, so konnten Sie die Datei ABCDEF-Bim MATLAB-Fcn-Block mit dem Compiund statt des ler in in eine C MEX-file 5'-function umwandeln (ABCDEF-B.DLL) MA TLA B-Fcn-Blocks einbauen; das erhtrht die Rechengeschwindigkeit etwas, aber nicht so vie1 wie eine in C geschriebene S-Funktion, ABCDEF-B-C.DLL, die Routinen aus einer Programmsammlung verwendet. Die Unterschiede im Zeitbedarf machen in diesem Fall nicht mehr als ungeftihr einen Faktor zwei aus - vermutlich nimmt das zero crossing detection einen grohn Teil der Rechenzeit in Anspruch.
4.2 4.2.1
Semibatch-Reaktor Stoff- und Energiebilanzen
Die Bilanzen fitr einen idealen Semibatch-Riihrkessel (SBR) lassen sich ebenfalls leicht angeben, sie folgen unmittelbar aus den allgemeinen Gleichungen fitr den Ruhrkessel: Stofiilanz:
(4.32) Enthalpieblanz ( ,,Wtirmebilanz"):
Als Anwendung dieser Bilanzen betrachten wir im folgenden Abschnitt etwas genauer ein Reaktionskalorimeter.
4.2.2
Beispiel: Reaktionskalorimeter
Das iibliche Reaktionskalorimeter ist im Prinzip nichts anderes als ein wandgekithlter Semibatch-Riihrkessel im Labormafistab. Die primare Mei3grofie ist der Warmestrom durch die Wand, aus dem uber die Wlirmeproduktionsrate Zielgrofien wie Reaktionsenthalpie, Umsatz sowie Reaktionsgeschwindigkeit gewonnen werden konnen. (Es mui3 eine Einzelreaktion vorliegen, oder zumindest mui3 die Wilrmeproduktion von einer Reaktion dominiert werden.) Wir schreiben die Enthalpiebilanz in einer Form, die auf ein Reaktionskalorimeter zugeschnitten ist:
Die verschiedenen Wtirmeterme sind:
112 4 Riihrkesselreaktoren qr Wzrmeproduktionsrate, die primare Zielgroi3e q f Warmeflu3 zur Reaktorwand qc Wiirmeflui.3 von der Heizung zum Reaktor qsec Sekundgre Wtirmeeffekte, insbesondere Warmeverluste an die Umgebung sowie die dissipierte Riihrleistung. Es ist
(4.35) und
(4.36) Wtirmebilanz fiir den Kithlmantel:
(4.37) (4.38) Wgrmebilanz fiir die Reaktorwand:
(PCP)w
8TW = Aw- d2Tw
at
(4.39)
812
mit den Anfangs- und Randbedingungen
t
=
0:
1
=
0:
1
=
Tw =Tw(0)
(4.40)
aTW
CI,(T~-T~)=-X~dl dTw L : c~j(T,-Tj)=-Xw81
(4.41) (4.42)
Die Bilanzen fiir den Warmestrom durch die Wand, q f , kann man vereinfachen, wenn man das Temperaturprofil zwischen Reaktor und Mantel zumindest als quasi-stationzr ansehen darf - das hzngt allerdings wesentlich von der Betriebsart ab. Dann kann q f aus der Temperaturdifferenz T,. - Tj ermittelt werden:
qf = hf(TT - Tj)
(4.43)
In der weitverbreiteten Betriebsart ,,Warmeflufirnodus" wird qf auf diese Weise bestimmt. Da hier Tr iiber Tj konstant gehalten wird, kann man das Temperaturprofil zwischen diesen beiden Temperaturen aber nur bei sehr
4.2 Semibatch-Reaktor 113
langsamen Anderungen von qf als quasistationtir behandeln. Aufierdem m d der Warmedurchgangswert, das Produkt hf , bekannt sein, entweder aus VorKalibrierungen, oder, wenn sich mit dem Umsatz der W&rmeUbergangskoeffizient a,. im Reaktor andert, aus Online-Kalibrierungen, die natilrlich das System storen. Weniger verbreitet sind Kalorimeter, bei denen der Wtirmeflua uber eine Warmebilanz des Kuhlmantels ermittelt wird. Bei dieser Betriebsweise erhalt man im Prinzip ohne zustitzliche MaDnahmen die primtir gewthschte Warmeproduktionsrate und als Zugabe den Wtirmedurchgangswert. Allerdings muf3 der Kiihlmittelstrom jetzt zwei gegenltiufigen, nur schwierig gleichzeitig zu erfiillenden Anforderungen gerecht werden: hohe Strtjmungsgeschwindigkeit im Kilhlmantel filr guten Wtirmeiibergang und gute Vermischung im Mantel SCF wie niedrige Stromungsgeschwindigkeitfitr eine geniigend genaue Messung der Temperaturdifferenzen zwischen Ein- und Ausgang des Kithlmantels. Unabhangig ob im sog. Wtirmefluil- oder Wsrmebilanzmodus betrieben: Die Regelung der Reaktortemperatur iiber die Manteltemperatur ist relativ trtige, so daf3 auf3er der sich zwangslaufig tindernden Manteltemperatur auch die Reaktortemperatur nicht geniigend konstant zu halten ist. Man kann die Regeldynamik entscheidend verbessern, wenn man die Reaktortemperatur iiber eine schnell ansprechende Kompensationsheizung im Reaktor regelt. Bisher haben sich derartige leistungskompensierte Reaktionskalorimeter nicht durchsetzen kbnnen, da auch bei ihnen der Wtirmebilanzmodus nur unvollkommen realisiert werden konnte und andere Mdnahmen zur Verfolgung sich tindernder Warmedurchgangswerte zu sehr aufwendigen Konstruktionen gefuhrt haben. Die angesprochenen Schwierigkeiten beim Arbeiten im Wtirmebilanzmodus, gleichzeitig hohe Strtjmungsgeschwindigkeit und geniigend genau erfdbare Temperaturdifferenz, ktjnnen aber heute bewaltigt werden, im Prinzip auf zwei Arten: Der Kiihlmantel wird entweder als Differential-Kreislauf-Kiihler betrieben oder im direkten Durchgang als Differentialkuhler, beides bei konstanter (Ausgangs-)Temperatu. Bei der Entwicklung eines solchen leistungskompensierten Reaktionskalorimeters mit Differentialkilhlung [ 111 haben detaillierte Simulationsstudien mit SIMULINK-Modellen eine grofie Rolle gespielt, z. B. um die MSR-Techniken zu optimieren. In vereinfachter Form sol1 im folgenden ein Simulationsmodell erarbeitet werden, das moglichst flexibel ist. Das heifit, es sollte sich ohne grofien Aufwand umstellen lassen z. B. a) auf verschiedene Betriebsarten b) auf verschiedene Modellierungstiefen oder c) auf verschiedene Venvendungszwecke. Ein erlauterndes Beispiel zu c): Man verwendet normalerweise ein Simulationsmodell, um Lusungen der Modellgleichungen zu erhalten. Man kann es aber auch als Trainingssimulator einsetzen, um den Umgang mit einer realen Anlage zu ilben. (Anmerkung: Eine anspruchsvolle und empfindliche Anlage, die kommerziell an die 300 000 DM und im Eigenbau immer noch um die 100 000 DM kostet, kann in einem Hochschul-Praktikum vorteilhaft durch einen gut ausgearbeiteten simulierten Versuch dieser Art dargestellt werden.)
114 4 Riihrkesselreaktoren Welche der in MATLAB vorhandenen Moglichkeiten der Programmierung man zweckmaig wtihlt, wurde schon mehrfach angesprochen und diskutiert. Es zeichnete sich ein Kompromii3 a b zwischen bequemer Programmierung und schneller Ausfiihrung, der nattirlich nicht allgemein verbindlich zu fixieren ist. Wir wahlen im folgenden ein SIMULINK-Modell, schon um zu zeigen, dai3 auch ein etwas umfangreicheres Modell gut zu kodigurieren ist. Es gibt aber weitere Grunde, die auch zum Teil in der einen oder anderen Form schon erwahnt wurden: Ein SIMULINK-Modell l a t sich zumindest in grober Niiherung wie eine Versuchsanlage oder ein Fliei3bild einer Versuchsanlage konfigurieren. 0
Parameter lassen sich leicht wtihrend eines Laufs verandern.
0
Modellanderungen sind nicht so fehleranfallig. Teile, die besser in einer Programmsprache dargestellt werden ktinnen, lassen sich als S-finktionen einfiigen, bequem in der MATLAB-Sprache, schnell arbeitend in C oder FORTRAN. Vielleicht ausschlaggebend ist hier , dai3 dem Regelverhalten besondere Aufmerksamkeit zukommt; ein Regler-Block ist leichter zu implementieren als ein Unterprogramm, besonders, wenn erst eins geschrieben werden mui3.
Der Programmentwurf ist ziemlich unabhangig von der Art der Programmierung: Erst mui3 die Struktur des Programms entworfen werden, bevor es an die Codierung geht: Was in SIMULINK zum Subsystem werden konnte, wilrde in MATLAB als Unterprogramm zur Wahl stehen. Ein Top-down-Entwurf konnte folgendermden aussehen, ohne Anspruch auf absolute Verbindlichkeit (Abb. 4.2): Im Subsystem ,,Reaktor berechnet man Parameter, die von den Zustandsgroi3en (Molzahlen und Temperaturen) abhangen, zweckmMig in Subsystemen, einzeln oder in kleinen Gruppen - das dient der Flexibilitat und der Ubersichtlichkeit. (Es sei noch einmal erwahnt: Wer gut in C programmieren kann, wird den Reaktorteil wahrscheinlich komplett als S-Funktion implementieren.) Da mit Hilfe dieser Parameter die rechten Seiten der DGls und aus denen die Zustandsgroi3en gebildet werden, entstehen im Blockschaltbild eine Vielzahl von Ruckfuhrungen, die die angestrebte Ubersichtlichkeit leicht konterkarieren k6nnen. Die Abb. 4.3 zeigt eine mii3gluckte Ausfiihrung dieser Art, die noch mit SIMULINK 1.3 gemacht wurde und nur zur Abschreckung dient. Im SIMULINKFenster konnte man sehen, dai3 das Verbindungswirrwar noch vie1 schlimmer ist als auf diesem Bild: Die automatische Blockverbindung in SIMULINK 1.3 pflegte Verbindungslinien ohne Rilcksicht aufeinanderzulegen, so dai3 sich oft mehrere Verbindungen unter einer Linie verstecken. Es diirfte augenfiillig sein, dai3 man hier mit mehr Umsicht zu Werke gehen und die Verbindungen starker vektorisieren mui3. Am besten bildet man einen oder hochstens einige ,,Variablen-Busse", so wie es der Entwurf in Abb. 4.4 zeigt.
4.2 Semibatch-Reaktor 115
4'0-I Reaktor
Reaktionskalorimeter
-
t - I
Visualisierung Archivierung
71 Info
Abbildung 4.2: Entwurf Reaktionskalorimeter.
1
I
II
I
I
Abbildung 4.3 SIMULINK-Modell filr den Reaktorteil eines Reaktionskalorimeters - ein mifigliickter Versuch.
116 4 Rithrkesselreaktoren I
-
Mu:
Abbildung 4.4: Reaktorteil eines Reaktionskalorimeters - weitgehend vektorisiertes Modell.
Die Blocknamen sind in dieser Darstellung ausgeschaltet, um die Ubersichtlichkeit nicht zu stark einzuschranken. Die Subsysteme der rechten Halfte berechnen insgesamt 18 Parameter, die in dem zweiten Mus-Block von rechts mit den sieben Zustandsgroflen aus dem Integrator und neun weiteren Groi3en zu dem 34er Hauptbus zusammengefaflt werden. Diese 34 GroBen gehen in die schon genannten Subsysteme und, zusammen mit drei von a d e n aus dem MSRBlock kommenden Steuergroflen, in die zwei Subsysteme der linken Halfte, in denen die rechten Seiten der DGls, also die Differentialquotienten der Zustandsgrbi3en gebildet werden. AuDerdem werden sie nach aui3en gefiihrt und dann in den MSR-Block hinein (Abb. 4.2), aus dem sie vermehrt um sieben MeBgriji3en zum Visualisierungs-Block geleitet werden. Aus dieser Hauptschiene von 34 bzw. 41 Grtii3en kann man nun jede gewiinschte Groi3e zur Messung oder zur Anzeige herausfiltern. Das geschieht mit Hilfe von Demuz-Blocken, deren Konfigurierung aber einiger Uberlegung bedarf - der Rechner sol1 uns wieder moglichst vie1 Arbeit abnehmen, besonders die umstwdliche oder fehlertrachtige. Ab der Version 3 hat SIMULINK einen Bus-Selector-Block, mit dem man entsprechend ausblenden kann. Er hat Vor- und Nachteile gegenilber der hier angewandten Methode - am besten, Sie probieren ihn selber aus! Zunachst fassen wir alle Variablen und Parameter in einer geeigneten Struktur zusammen; dafiir schreiben wir ein kleines Hilfsprogramm, VARIALIS, mit dem wir interaktiv arbeiten konnen:
4.2 Semibatch-Reaktor
117
VARIALIS
xein=' '; iz=input('Anzahl der bisherigen Eintraege?'); while strcmp(xein,'Ende')==O xein = input('Naechste Variable: ','s'); nelement=input( 'Anzahl der Elemente: ');%Elemente eines Vektors if isempty( nelement)==l,nelement=l;,end iz=iz+l; variable(iz).nummer=iz; variable(iz). Mname=xein; variable(iz) .elemente=nelement; end variable (iz)=[];
so entsteht VARIABLE, ein structure array ( a d neudeutsch ein record, auf deutsch ein Verbund): load variable variable
Es enthalt als Feld ,,Mname" die Variablen des SIMULINK-Modells SIMUFK L ~ O(Abb. 4.2) in der Reihenfolge des Variablen-Busses. Die Variablen kbnnen Vektoren sein; deswegen enthdt das Feld ,,elemente" die Anzahl der Vektorelemente. Zur Berechnung des Ausblendevektors fiir die Demuz-Blbcke mit Hilfe des M-Files RKLAUSBV wird das Feld ,,elemente" auf den Vektor lvar kopiert, so wie es die verschiedenen Busse erfordern, also z. B. : for i = 1:27 lvar27(i)= variable(i).elemente; end oder for i = 1:30 Ivar30(i)= variable(i).elemente; end usw. Wie gesagt ist die Reihenfolge in VARIABLE identisch mit der im VariablenBus. Um das Variablenfeld bequem zusamrnen mit den zugehbrigen Nummern ausgeben zu kbnnen, ist eine Urnwandlung der Nummern in Zeichenketten vorteilhaft : for i = 1:17 variasl(i).nummer=num2str(variable(i).nummer); varias2(i).nummer=num2str(variable(i+l7).nummer);
end
118 4 Riihrkesselreaktoren leer=' leerv=leer; for i = 1:16 leerv=[leerv; leer] ; end I;
[char(varia ble( 1:17).Mname) ,char(variasl. nummer) ,leerv,... char(variable( 18:34).Mname),char(varias2.nummer)]
% Die Abstande zwischen den folgenden Kolonnen sind gegeniiber der Ausgabe im MATLAB-Fenster ge&ndert.% M 1 qf 18 rho 2 qr 19 W 3 q=u 20 f 4 qsec 21 vol 5 qrvm 22 fc 6 nstwand 23 mc 7 X 24 mcinaktiv 8 Tr 25 cprf 9 Tc 26 CPr 10 Tj 27 r 11 nP0 28 eta 12 ui 29 lambda 13 TjO 30 hr 14 mP0 31 hj 15 Trm 32 qc 16 Tjm 33 17 TjOm 34 qj
Wenn viele Variable vorhanden sind, kann es sich lohnen, die Nummern (im Feld ,,nummer") der Variablen aus einem Feld mit alphabetisch geordneten Variablen zu entnehmen:
[Y ,I]=sortrows(char(variable.Mname)); %Zum Ausgeben: [Y(1:17,:),num2str(I( 1:17)),leerv,Y(18:34,:),num2str(I(18:34))] Tc 26 mP0 31 Tj 27 mr 1 TjO 30 nP0 28 TjOm 34 nstwand 23 Tjm 33 q= 16 Tr 25 qf 18 Trm 32 17 CPr 10 qr 19 cprf 9 qrvm 22
a
4.2 Semibatch-Reaktor
eta
12 4
f fc hj hr lambda
6
15 14 13 mc 7 mcinaktiv 8
qsec
q=u r rho ui vol W X
119
21 20 11 2 29 5 3 24
Aus dieser Tabelle konnen nun die Nummern der auszufilternden Variablen leicht herausgesucht und einem Nummernvektor zugeordnet werden, zum Beispiel: vnum=[IO 7 11;
Wenn man vnum und lvar an das Programm RKLAUSBV iibergibt, erhkilt man den entsprechenden Dernux-Vektor zusammen mit einem zweiten Vektor, der angibt, an welcher Ausgabestelle des Demux-Blocks die ausgeblendeten Variablen erscheinen (im Beispiel also cpr, mc und mr): [vl,vlaus]=rklausbv(vnum,lvar27)
vl
=
1 8 1 2 121
vlaus
=
1 3 5
Das besorgt fiir alle Demm-Blocke ein weiteres kleines Hilfsprogramm, DEMUX.
Wiederum ftihren viele Wege nach Rom. Man konnte z. B. statt des Verbunds VARIABLE eine Excel-Tabelle anlegen und dann weiter bearbeiten, besonders bequem uber die Toolbox Excellink. Ohne diese Toolbox geht es natiirlich auch, nach Mustern, die in diesem Buch hgufiger verwendet werden. So wiirde es eine Word-Tabelle auch tun, aus der man sich mit drag and drop z. B. den Vektor lvar herstellen kannte. (Das Sortieren von Word-Tabellen ist allerdings kein reines Vergniigen.) Mit der Zeit, d. h. wenn man die MATLAB-Moglichkeiten schon einigermafien gut kennt, wird man auf solche zusatzlichen Hilfsmittel oft verzichten. Wie arbeitet man mit dem SIMULINK-Model1 ,,Reaktionskalorimeter"? Das hkingt in hohem Mafle davon ab, ob man es selbst erstellt hat, ob man wie Sie, der Leser, in ein fertiges Modell eingefiihrt wird oder ob man es als Simulator benutzt, als virtuelle Versuchsanlage. In jedem Fall aber - also auch, wenn man sein eigenes Modell verwendet - sollte es eindeutige Informationen enthalten, wie man es betreibt. Dazu dient in vielen Beispielen ( nicht nur in diesem Buch) ein Info-Block im Blockschaltbild. Sehen wir uns seinen Inhalt an, durch Doppelklick am Rechner, hier in Schlagworten:
120 4 Riihrkesselreaktoren macht alle Voreinstellungen - nach diesem Kommando kann man SIstarten (und die folgenden Ausfilhrungen in RKLHELP ilberspringen, wenn man sich mit SIMULINK auskennt). Weitere Hinweise und Hilfen - so erfahrt man aus dem Info-Block - geben das Text-File RKLHELP und selbstverstandlich die Handbilcher; aus Platzgrilnden wird das mit dem MATLAB-Editor geschriebene Text-File R K L H E L P in uberarbeiteter Form wiedergegeben: GLOB
MUFKLlO
RKLHELP.TXT
Durch Aufrufen des M-Files glob werden alle Parameter auf ihre Standardwerte gesetzt. Die veraenderbaren Parameter befinden sich im M-File rklstapa. Veraenderungen werden aber zweckmaessig nicht in rklstapa gemacht, sondern in Kopien von rklstapa mit eigenem Namen, die fuer das Protokoll behalten werden. Namensvorschlag: ~2100997fuer den zweiten Versuchslauf am 10.9.97. Vor dem Kopieren von rklstapa Sicherheitsabfrage mit exist(’filename’), ob das gewuenschte M-File filename schon existiert. Man kann verschiedene (Vor-)Versuchsablaeufe unterscheiden, fur die folgende Modellpararneter-Werte vorgeschlagen werden:(Die anderen veraenderbaren Parameter ergeben sich entweder aus der Aufgabenstellung oder koennen (muessen aber nicht) uebernommen werden.)
1. Aufheizen: npO(nkz)= 0 (kein Zulauf); sechsfache Vorlagemenge nO
2. Regler einstellen: npO(nkz)= 0 (kein Zulauf); den Proportionalanteil des a b zustimmenden Reglers stufenweise erhohen bis zum Auftreten von Dauerschwingungen (Ziegler-Nichols-Methode) 3. Verlustleistung: npO(nkz) = 0 (kein Zulauf); (Vereinfachend wird angenommen, dass die Verluste nicht vom Fuellstand abhaengen) 4. Waermeuebergang: npO(nkz) = 0 (kein Zulauf); nO f u r etwa halbe Fuellhoehe; die Ruehrerdrehzahl rvm stufenweise veraendern
5 . Reaktionsversuch: tdos0, den Dosierbeginn, so waehlen, dass die Temperaturen bereits eingeregelt sind.
Das File GLOB sollte man sich ansehen: Es enthalt alle Parameter mit Werten, Einheiten und Erlauterungen; auflerdem ruft es Unterprogramme auf, die ebenfalls einer Inspektion wert sind. Bei der Einstellung der Regler nach 2 ) oder der Riihrerdrehzahl nach 4) braucht nach man nicht filr jede Anderung die Simulation neu zu starten das ware beim Versuchssimulator umstandlich, wenn er (annahernd) in Echtzeit lauft. Es ware auch unrealistisch, weil man im realen Versuch Steuergroflen zu jeder Zeit andern kann. Man kann auch wahrend eines SIMULINK-Laufs, oder besser in einer Pause, Parameter andern (uber das Menil Simulation im SIMULINK-Fenster). Allerdings kann man Parametern in Pausen nicht ohne
4.2 Semibatch-Reaktor 121
weiteres im MATLAB-Fenster neue Werte zuweisen: das geht nur iiber den Befehl set-param . Man kann aber die entsprechenden Blijcke ijffnen und Zahlenwerte einsetzen - die wichtigsten Blijcke sind hier in einem Subsystem ,,Warte" zusammengefdt. Nur sollte man Vorsorge treffen, nicht die Zahlen statt der Parameternamen abzuspeichern, sonst funktioniert bei der niichsten Benutzung die Zuweisung nicht; a m einfachsten arbeitet man mit einer Kopie des Modells. Die ,,Aufheizen'' genannten Vorversuche dienen im wesentlichen dazu, Informationen uber das Kalorimeter zu erhalten und sich mit ihm vertraut zu machen. Welche Temperaturdifferenz zwischen Reaktor und Mantel sol1 man z. B. einstellen? Dazu einige uberlegungen, die von folgenden nicht untypischen Versuchsverhtiltnissen ausgehen: Vorgelegt wird eine Komponente (oder ein nicht reagierendes Komponentengemisch), dann werden eine oder mehrere Komponenten zudosiert und nach Dosierende das Ende der Reaktion abgewartet. Der Kessel ist dann hijher gefiillt als am Anfang, vielleicht bis dicht an das Fullvolumen. Die maximale Heizleistung m d ausreichen, die Wiirmeabfuhr beim Fullvolumen zu kompensieren; haher darf die Differenz der Sollwerte von Reaktor- und Manteltemperatur nicht sein. Um sie abschiitzen zu kijnnen, braucht man den Wtirmedurchgangskoeffizienten h, den man aus dem Vorversuch erhalten kann. Die maximale Temperaturdifferenz wird man aber nicht einstellen: Optimal ware eine Temperaturdifferenz, bei der im Maximum der Warmeproduktionsrate im Versuch die Heizleistung gerade auf Null abfallen konnte; dieser Wert kann allerdings - zumindest vor dem ersten Reaktionsversuch - nur uberschltigig abgeschtitzt werden, da er von Dosierrate und Reaktionsgeschwindigkeit abhtingt. Nehmen wir einmal an, dai3 die maximale Wiirmeproduktionsrate 100 W betragen wird, dann kijnnen wir im Vorversuch ,,Aufheizen" mit der Standardeinstellung von 100 W filr die Heizleistung uifix sehen, welche Temperaturdifferenz sich einstellt. Die Fullhahe fUr die Standardvorlage rechnen wir zuniichst aus und erhijhen dann die Vorlage bis in die Ntihe des maximalen Werts von 20 cm: glob
%(Zur Erinnerung: In diesem File sind auch die folgenden Variablen erklart!) npO( 2)=0; volO=sum( nO.*mol k./rhok);
hO=voIO/ FI/( 1-epsmq)
hO = 0.0290 %m %Wir konnen also gut die sechsfache Vorlage wiihlen: n0=6*n0
Damit starten wir den Vorversuch, der uns gleichzeitig auch die Zeitkonstante der Ubergangsfunktion und den Wtirmedurchgangskoeffizienten bringen kann; das Ergebnis sehen wir in Abb. 4.5.
122 4 RUhrkesselreaktoren
Abbildung 4.5: Vorversuch ,,Aufheizen" bei Standardwerten (Ausnahme: sechsfache Vorlagemenge) . - T,., - - Tj
Berechnung des Warmedurchgangskoeffizienten h: volO=surn( nO.*rnol k./rhok); hO=volO/FI/( 1-epsrnq); hf=uifix/(sy(size(sy, 1),3)-sy( size(sy, 1),4));
% sy ist die To- Worlcspace-Ausgabematrix im Subsystem ,,Visualisierung, Archivierung".% f=pi*dk*hO+pi*dk^ 2/4; h=hf/f
h = 0.1775
Bei der Standardvorlage ergeben sich natilrlich hohere TemperaturdifferenZen von etwa 30 K. J e nachdem, ob man das Maximum der Warmeproduktionsrate mehr zu Beginn oder mehr am Ende der Dosierung erwartet, wird man also - bei diesen oder ahnlichen Bedingungen - Temperaturdifferenzen zwischen 0.1 und 0.3 K/W einstellen. Die Aufgaben zum Reaktionskalorimeter bilden einen Block, und es ist ratSam, sie nacheinander anzugehen. Wer sich eine einzelne Aufgabe herauspicken mochte, kann sich vom Info-System leiten lassen.
4.3 Konti-Reaktor
4.3 4.3.1
123
Kont i-Reakt or Stoff- und Energiebilanzen
Die Stoff- und Energiebilanzen sind schon am Anfang dieses Kapitels abgeleitet worden. Bei ver8nderlicher Dichte der Reaktionsmasse miissen sie noch um einige Ausdrucke ergtinzt werden. Oft kann man aber in guter Ntiherung Modellparameter des CSTR als konstant ansehen und die Bilanzgleichungen auf eine besonders einfache, dimensionslose Form bringen. Wenn z. B. fiir eine Reaktion A ---t B , n-ter Ordnung bzgl. A,
-
V = const, p = cunst, cp = c; = cunst, A R H = const
(4.44)
gilt, erhalt man
dX
--
-
-x + Da (1 - X ) "
(4.45)
d(t/T)
(4.46) mit
(4.47)
TM ist die Temperatur des (KUhl-)Mantels.
4.3.2 Beispiel: Optimierung einer
Losungs-Copolymerisation in einer vierstufigen Riihrkesselkaskade Die Anregung zu dieser Aufgabe stammt von einem sehr empfehlenswerten Computerprogramm des Fonds der Chemischen Industrie (FCI). Es soll ein Styrol-Acrylnitril-Copolymeres im molaren Verhtiltnis von 1:1 und mit einem Polymerisationsgrad von 3000 hergestellt werden; absetzbar ist eine Menge, die einer Produktionshbhe von 3.6 told (2.5 kg/min) entspricht. Selbstversttindlich soll ein moglichst hoher Gewinn erwirtschaftet werden. In der (relativ kleinen) Anlage wird ein Gemisch von Initiator AIBN (als lO%ige Lbsung), Styrol, Acrylnitril und Toluol als Lbsungsmittel kontinuierlich einer Kaskade aus vier 500-1-Rtihrkesseln zugeftihrt: Der Durchsatz, die Zusammensetzung und die vier
124 4 Rifhrkesselreaktoren Kesseltemperaturen sind die Parameter des Verfahrens, die in gewissen GrenZen variiert werden konnen. Es handelt sich also um eine Mehrzieloptimierung mit den vier genannten Zielgrbflen Monomerenverhgltnis, Produktionshohe, Polymerisationsgrad und Gewinn. Einschrtinkende Nebenbedingungen aufler den Parametergrenzen sind durch die begrenzten Moglichkeiten der Wtirmeabfuhr aus den wandgekiihlten Kesseln gegeben, die mit zunehmendem Polymergehalt schwieriger wird. In dem FCI-Computerprogramm wird aus didaktischen Griinden gefordert, die optimalen Parameter durch Probieren zu finden, was in einer aufwendigen grafischen Umgebung erfolgen kann. Wir verzichten auf die grafische Umgebung, versuchen das Problem aber zuntichst ebenfalls durch Probieren zu losen, um uns der Schwierigkeit eines solchen Vorgehens voll b e w d t zu werden. Dann aber setzen wir ein Optimierverfahren aus der MATLAB-Toolbox ein. (In der SE miissen wir uns auf das Probieren beschriinken.) Weitere Angaben zum Produktionsverfahren: Das Reaktionsgemisch wird nach dem Verlassen des vierten Kessels aufgearbeitet: Lbsungsmittel und nicht umgesetzte Monomere werden zuriickgefiihrt. Bewertung: Der Gewinn wird berechnet aus dem Wert des erzeugten Produkts, von dem die Kosten fiir Ausgangsstoffe, Aufarbeitung und Kuhlung abgezogen werden; weiter wird ein Fixkostenbetrag angesetzt, der Ausgaben wie Lohne, Kapitaldienst usw. beritcksichtigt. Der Produktwert richtet sich nach den geforderten Eigenschaften Monomerenverhaltnis und Polymerisationsgrad. B e sonderer Wert wird auf die genaue Einhaltung des Monomerenverhtiltnisses von 1:l gelegt; Abweichungen nach oben oder unten fiihren zu drastischen Abstrichen im Produktwert, auflerhalb des Bereichs von 48 bis 52 % wird das Produkt wertlos. Abweichungen vom Polymerisationsgrad werden weniger streng bewertet, fiihren aber zu einer linearen Wertminderung. Zu hohe Warmeerzeugung in einem der Kessel fiihrt zu hohen Verlusten, da sie in der Simulation einen totalen Produktionsausfall bedeutet. (Die angezeigten Werte fiir den ,,Gewinn" bei einem solchen Produktionsausfall sollten nicht allzu ernst genommen werden, sie spiegeln eher eine vollige Zerstorung der Anlage wieder.) Hier wie bei den anderen Simulationsannahmen wurden zum Teil starke Vereinfachungen getroffen z. B. ist keine Abschaltautomatik fiir eine drohende Uberhitzung der Kessel vorgesehen. Von einer realistischen Simulation ist dieses Spielprogramm noch ein gutes Stiick entfernt. Sein Zweck ist zum einen, sich die Wirkung der verschiedenen Einfluflgroflen auf das Polymerisationsverfahren qualitativ zu iiberlegen und zumindest im Trend quantitativ vor Augen zu fiihren, und zum anderen, die in der Optimierliteratur sehr stiefmiitterlich behandelte Mehrzieloptimierung samt einem geeigneten MATLAB-Programm beispielhaft vorzustellen. Ein Vergleich der Ergebnisse nach dem vorliegenden Programm und nach dem FCI-Programm sollte im iibrigen nicht versucht werden: Das FCI-Programm arbeitet (wie das vorliegende) im Hintergrund, und nicht alle dort getroffenen Annahmen sind eindeutig auszumachen. Leider gelang es nicht , nghere Informationen von den Autoren zu erhalten; bei sicherlich gutem Willen fehlte ihnen offenbar die Zeit, sich erneut in ihr Simulationsprogramm zu vertiefen. Nun zur Benutzung des Programm COPOHEAD, das seinerseits COPOLY auf-
4.3 Konti-Reaktor
125
ruft: Man definiert zunlchst eine Reihe von Variablen als global; diese Arbeit ist Ihnen schon abgenommen mit dem File COPOIN. Dann setzt man die Parameter in der Reihenfolge Zulauf, Initiatorlosung, Styrol, Acrylnitril und die Temperaturen filr die Kessel 1 bis 4 im Parametervektor pa. Seine unteren und oberen Grenzen sind in den beiden folgenden Vektoren value lower bound und value upper bound angegeben: &=[0.10.01 100 100 100 35 35 35 351; &=[lo 30 600 600 600 75 75 75 751; die Werte ftir die Einsatzstoffe (2 bis 5) sind Volumenanteile einer gedachten Mischung; in der Praxis wird man die Stoffe einzeln im gewunschten Verhiiltnis dosieren, so dai3 ihre Summe den Zulaufwert ergibt. Dann ruft man das Programm COPOHEAD(PA) auf: Es liefert einen Vektor, der folgende Werte enthalt: Die vier ZielgroBen Monomerenverhaltnis (XSty), Produktionshohe (mpol), Polymerisationsgrad (DP), Gewinn, sowie ftir die vier Kessel das Verhaltnis von abgefilhrter W a m e zu maximal abfilhrbarer Warme (maximal bei unendlich goBern Kllhlwasserdurchsatz!). Man wird sich zweckmtiaig ein script file erstellen, daB die Globalvereinbarungen enthalt, COPOHEAD aufruft und vielleicht - als besonderer Luxus - die vier ZielgroBen ausgibt. Die Parameter wird man im MATLAB-Fenster setzen und am besten zusammen mit den Ergebnissen abspeichern: COPOIN
global c a c l s t a r nenlO P clc2 ci cto CP X1 mpp k3 k33 Q mw global Tkes X 1 tau cstO cacO global wp rohko kow auf erl global Qab global h hv %vlb=[O.l 0.01 100 100 100 35 35 35 351; %vub=[lO 30 600 600 600 75 75 75 751; als Gedachtnisstutze f=copohead( pa); f l =n um2str( round(f( 1)* 100)); f2=nu m2str (rou nd(f( 2)* 10)/10) ; f3=num2str( round(f( 3))); f4=n um2str(round(f(4))); leer=' '; dl=[leer,'XSty',leer,' mpol ',leer,' DP ',leer,' Gewinn']; d2=[leer,'[%] ',leer,'[kg/min]',leer,' [] ',leer,' [DM/d]']; d3=[leer,' ',fl,' ',leer,' '.f2,' ',leer,f3,leer,f4,' '1; disp( leer);disp( leer)
disp( leer) disp(d3)
Wir setzen nun z. B. pa=(vl b+vub)/2;
126 4 Ruhrkesselreaktoren und rufen COPOIN auf; als Ergebnis erhalten wir:
XSty
mpol
DP
[%I
Ckg/minl
[I
51
1.8
Cewinn CDM/dl
1494 -5621
Gar nicht so schlecht - bis auf den ,,Gewinn", also die Verluste von 5621 DM pro Tag! Zum Speichern von Parametersiitzen und Ergebnissen schreiben wir am besten ein schmuckloses script file wie z. 3. das folgende: COPOSPEICH if exist('para') == 0 palet=str2rnat('vO ','mti');
palet=str2rnat(paIet,'rnIsty'); palet=str2mat( palet,'mIacn'); palet=str2rnat( paIet,'rnItoI'); palet=str2rnat( palet,'TKesl'); palet=str2mat( palet,'TKes2'); palet=str2rnat( palet, 'TKes3'); palet=str2mat( palet, 'TKes4'); para=str2rnat(palet,'XSty'); para=str2rnat( para,'rnpoI'); para=str2mat( para,'DP'); para=str2rnat( para,'Erloes'); end if exist ('coponurnv') == 0 coponum=[pa';f( l);f(2);f(3);f(4)]; coponumv=coponum; save coponurnv.txt coponurnv -ascii else coponum=[pa';f( l);f(2);f(3);f(4)]; coponurnv=[coponumv,coponurn]; save coponumv.txt coponumv -ascii end
Mit Hilfe des Files coponumv.txt konnen wir uns dann die Daten ansehen und mit para die Namen der Variablen in Erinnerung rufen; COPOPLOT erlaubt zudem eine einfache grafische Darstellung - bei dreizehn Variablen etwas gedrangt l besonders auf kleineren Bildschirmen. Das ist sicher nicht sehr komfortabel und nicht besonders schdn! Selbstverstiindlich kann man Ein- und Ausgabe der Daten und iiberhaupt die Benutzung dieses und anderer Programme sehr vie1 ansprechender gestalten - der Fantasie sind dabei kaum noch Grenzen gesetzt. (Auf einen sinnvollen Einsatz von Menufiihrungen und grafischen Benutzeroberfliichen wird im Anhang sowie an einigen
4 . 3 Konti-Reaktor
127
anderen Stelle eingegangen.) Fiir die eigene Arbeit geniigt es jedoch i. a., das Kommando-Fenster zu benutzen oder - fur die Eingabe - Treiber-Programme (wie COPOIN) zu edieren. Bei den Versuchen, bessere Verfahrensparameter zu erhalten und zumindest in die Gewinnzone zu kommen, kijnnen wir uns von einigen Grundtatsachen der (Co-)Polymerisationsverfahrenleiten lassen: Hohe Verweilzeiten (geringer Durchsatz) und hohe Temperaturen begiinstigen Abbruchs- und Ubertragungsreaktionen und filhren zu niedrigeren Polymeristionsgraden. Mit wachsender Initiatorkonzentration sinkt der Polymerisationsgrad; die Kettenlangenverteilung wird dabei aber enger, was hier in der Simulation nicht beriicksichtigt wird.
0
0
0
Die Zusamrnensetzung des Copolymeren haingt zwar von der Zusammensetzung der Reaktionsmasse ab, aber nicht unmittelbar: Entscheidend sind die unterschiedlichen Reaktionsgeschwindigkeiten fiir die Anlagerung der Monomeren an die wachsende Kette, und deren Verhaltnis andert sich mit der Temperatur. Hohe Verweilzeiten, hohe Temperaturen und hohe Konzentrationen filhren zu groi3en Ausbeuten.
Wenn wir geniigend herumprobiert haben, um unsere Copolymerisation zu verbessern, und dabei vielleicht schon passable Werte erhalten haben, von denen aus man eine Optimierrechnung starten konnte, sollten wir COPOIN erweitern, urn die Mehrzieloptimierung aus der Optimization Toolbox zu verwenden. COPOINl
global c a c l s t a r nenlO P clc2 ci cto CP X 1 mpp k3 k33 Q mw global Tkes X1 tau cstO cacO global wp rohko kow auf erl global Qab global h hv O/o**************************************
YO pa=[v0, mI i,m1st,mIac ,mI to,T kes]; goal=[.5 2.5 3000 6000 1 1 1 11; goal=[.5 2.5 3000 8000 1 1 1 11; goal=[.5 2.5 3000 7500 1 1 1 11; w=-a bs(goal); w( 1)=-0.01; ~(5:8)=-~(5:8); vlb=[O.l 0.01 100 100 100 35 35 35 35); vub=[lO 30 600 600 600 75 75 75 751; options=l; options( 14)=iOOOO;
128 4 Riihrkesselreaktoren options( 15)=1; O/~***********~************************************************
[pa,options]=attgoal( 'copohead' , pa ,goal,w,options,vlb,vub);
.................................................. f=copohead( pa);
.................................................. f l =nu m2str( round(f( 1)* 100)); f2=num2str( round(f(2)*10)/10);
f3=num2str(round(f(3))); f4=num2str(round(f(4))); leer=' '; dl=[leer,'XSty',leer,' mpol ',leer,' DP ',leer,' Gewinn']; d2=[leer,'[%] ',leer,'[kg/min]',leer,' ',leer,' [DM/d]']; d3=[leer,' ',fl,' ',leer,' ',f2,' ',leer,f3,leer,f4,' '1; disp( leer);disp(leer) disp(dl);disp(d2);
[I
disP('_______________--__---_--_----___--disp( leer) disp(d3)
'1
Wie haufig wird man auch hier beim Optimieren von verschiedenen Punkten aus starten mussen; es empfiehlt sich, die Optimierung mit den erhaltenen Parametern neu zu starten. Das beste Ergebnis war bisher das folgende:
4.4
Probleme und Losungen
4.4.1 Losung eines DAG1-Systems durch Kombination von DG1- und algebraischen Gleichungslosern (*) Fur das DAG1-System (4.21) bis (4.23) sollen die Konzentration-Zeit-Kurven mit + den folgenden Parameterwerten berechnet werden: K1 = 1, kh2 = G2 = 100, kg = 1, die Anfangskonzentration von A sei 1, die der anderen Komponenten Null. Einheiten mussen wir in diesem Lehrbeispiel nicht berucksichtigen, sie mussen im Ernstfall konsistent sein. Diese Aufgabe wiederholt zum Teil das Problem 3.4.15, sie ist aber verbdert und erweitert.
Losungsvorschlag Wir setzen DGls fur die Konzentrationen von D und E an und losen sie mit einem DG1-Loser von MATLAB; bei jedem Schritt des DG1-Losers mussen die drei
4.4 Probleme und Ltlsungen
129
restlichen Konzentrationen simultan aus der Gleichgewichtsbeziehung fur die erste Reaktion G1. (4.21) und stbchiometrischen Beziehungen berechnet werden. Da die Gleichgewichtsbeziehung nichtlinear ist, benutzen wir einen algebraischen Gleichungsloser wie z. B. fmins. Als stbchiometrische Beziehungen verwenden wir Bilanzen fiir B und C; fiir die hier angenommenen Anfangsbedingungen lauten sie: B-Bilanz:
3(AO - A ) - B = 0
(4.48)
C-Bilanz:
A0 - A
-C-D -E
0
(4.49)
wobei die Komponenten-Symbole A , B usw. der Einfachheit halber auch fiir ihre Konzentrationen stehen. Die Unterprogramme fiir den DG1- und den Gleichungsloser sind in den Dateien A B C D E und ABCDEGL enthalten: ABCDE
function dc = abcde(t,c)
global A0 A B C D E D=c(l);E=c(2); options( 2)=Ie-lO;options(3)=Ie-IO; B=fmins( 'abcdegl', B,options); dc( 1)=100*C^2-100*~(1)^2-1*~(1); dc(2)=l*c( 1); dc=dc'; ABCDEGL
function f = abcdegl(x) global A0 A B C D E B=x; A=(3*AO-x)/3; C=AO-A-D-E f=(xA3*C/A-l) -2;
Wir setzen die Anfangsbedingungen global A0 A B C D E AO=l;B=O;C=O;D=O;E=O;
und wghlen als Loser ode45, da wir ein nur milde steifes Sytem haben:
130 4 Riihrkesselreaktoren
3,
40
Zeit
60
Abbildung 4.6: Konzentrations-Zeit-Kurven von A (-), sowie E (- . - .). tic;[t,y]=ode45('abcde' elapsed-t i m e = 21.5470
,[O
80
1
B (- -), C und D (. .)
loo],[O;O]);toc
y enthtilt die Konzentrationswerte von D und E; wenn wir die anderen Konzentrationen auch kennen mochten, miissen wir sie erst berechnen; dazu lljst das File ABCDEABC simultan die algebraischen Gleichungen (Gleichgewichtsund stochiometrische Beziehungen) und stellt die Konzentrationen von A, B und C in den Variablen a, b und c bereit. ABCDEABC
global A0 A B C D E si=size(y);siI=si( I); a=zeros(sil, I); b=zeros(si 1,l); c=zeros(si I,I);
B=l; for i = I : s i ( I ) D=y(i,l);E=y(i,Z); B=fmins( 'a bcdegl' ,B); b( i)=B;a( i)=A;c( i)=C; end
Die Kurven fiir C und D fallen scheinbar zusammen (Abb. 4.6), denn die Reaktion C ZD ist verhtiltnismtiflig schnell und ihre Gleichgewichtskonstante
4.4 Probleme und Ldsungen
20
40 Zeit
60
80
131
J
100
Abbildung 4.7: Test auf Einstellung des Gleichgewichts zwischen C und D.
ist eins. Hatten wir also fiir diese Reaktion auch eine Gleichgewichtsbeziehung ansetzen konnen? Wir sehen uns das Verhttltnis der Konzentrationen von D und C etwas genauer an (Abb. 4.7): Ganz offensichtlich entfernt sich mit zunehmender Zeit das Konzentrationsverhsltnis vom Gleichgewichtswert weg. Wir haben hier ein einfaches Beispiel fiir die Tatsache, dai3 sich in nichtlinearen Systemen die Steifheit mit dem Reaktionsfortschritt andert. In unserem Fall htitten wir also nicht mit einer Gleichgewichtsbeziehung rechnen diirfen. Kann man dieses immer weniger steif werdende DGI-System auch mit odel5s h e n ? Probieren Sie es! (Gibt es dabei Uberraschungen? Sie werden deutlich sehen, daf3 die Standard-Toleranzen nicht fiir alle Probleme ausreichen; denken Sie nicht nur an die DG1-Loser, sondern vor allem auch an fmins!)
4.4.2
Losung eines reaktionskinetischen DAGI-Systems durch Uberfuhrung der Gleichgewichtsbeziehungen in kinetische Gleichungen (*)
In reaktionskinetischen DAG1-Systemen kann man vorteilhaft die Gleichgewichtsbeziehungen durch hinreichend schnelle Hin- und Riickreaktionen ersetzen; hinreichend heii3t: Diese Reaktionen miissen iiber den gesamten Reaktionsablauf praktisch im Gleichgewicht bleiben. Ersetzen Sie im Gleichungssystem (4.21) bis (4.23) die GI. (4.21) durch eine B-Bilanz mit Massenwirkungskinetik, also:
132 4 Rffhrkesselreaktoren
(4.50) mit F = K1 = 1. Fiir die Geschwindigkeitskonstanten kann versuchsweise ein 1 Wert von 1000 eingesetzt werden, die iibrigen Daten stehen in Problem 4.4.1. Losungsvorschlag
Jetzt haben wir ein steifes System und verwenden daher als Loser odel5s; das U P A B C D E ~wurde durch Erweitern von ABCDE gewonnen:
CDE AO=1; B=O;C=O; D=O;E=O; [t,y]=odel5s('abcdel',[O 1001,[D;E; B]);
global A0 A B
ABCDE~
function dc = abcdel(t,c)
global A0 A B C D E D=c( l);E=c(2);B=c(3); A=( 3*AO-B)/3; C=AO-A-D- E;
d~(l)=100*C~2-100*~(1)~2; dc(2)=l*c( 1); d~(3)=1000*A-1000*B 3*C; dc=dc';
Wir erhalten filr D, E und B dieselben Konzentrations-Zeit-Verlaufewie in Abb. 4.6. Prilfen wir noch, ob die erste Reaktion im Gleichgewicht ist, die zweite nicht iiber den ganzen Bereich; zum Vergleich konnen wir noch den Verlauf von E einzeichnen: A=AO-y( :,3)/3; C=AO-A-y(:,1)-y(:,2); plot(t,y(: ,3). 3.*C./A,t,y(: ,l).2./c. ^2,t,y( :,2))
,.
Man sieht in Abb. 4.8: Die sehr schnelle Reaktion ist im gesamten Bereich im Gleichgewicht, die schnelle Reaktion entfernt sich mit zunehmender Reaktionsdauer immer mehr. (Die Schwankungen im Verlauf des ersten Gleichgewichts sind nicht weiter bedeutsam, aber konnen Sie sie erklaren und verkleinern?) Wer sich abgemiiht hat, in dem vorigen Problem 4.4.1 vernunftige Ergebnisse mit odel5s zu erzielen, und zudem noch die Rechenzeiten vergleicht, wird wenn moglich den hier vorgezeichneten Weg gehen.
4.4 Problerne und Losungen
133
Abbildung 4.8: Test auf Gleichgewicht - B3C/A, - - D2/C2, . . . E.
4.4.3
Losung eines DAG1-Systems uber Differentiation der algebraischen Gleichungen (**)
Das Gleichungssystem (4.21) bis (4.23) sol1 durch Differentiation in ein DG1System umgewandelt und mit den Werten aus Problem 4.4.1 geltjst werden. Losungsvorschlag
Den 2-Variablen in den Gleichungen (4.24) und (4.25) entsprechen die Konzentrationen der Komponenten D und E, den y-Variablen entsprechen A, B und C. Das algebraische Gleichungssystem g besteht aus der Gleichgewichtsbeziehung, der B- und der C-Bilanz. Filr die Differentiationen milssen wir bei diesem einfachen Fall nicht unbedingt MAPLE bemilhen, sollten es aber im Hinblick auf grbBere Gleichungssysteme vielleicht zur Ubung zusiitzlich noch tun; man erhiilt:
-(: : )
--
ax
-1
(4.51)
-1
(4.52)
134 4 Ruhrkesselreaktoren Mit diesen Beziehungen lassen sich nun zu den DGls filr die Konzentrationen von D und El die schon in den vorhergehenden Problemen formuliert wurden, drei weitere filr A, B und C hinzufiigen; sie gehen aus dem nachfolgenden UP hervor: ABCDE:!
function dc = abcde2(t,x) A=x( 1);B=x(~);C=X(~);D=x(4); E=x(5); dc( 4) =lOO*x( 3) 2- lOO*x( 4) 2- l * x ( 4) ;%fur D dc( 5)= 1*x(4); %fur E dc=dc'; gx=(O 0;o 0;-1 -11; gy=[-BA3*C/AA2 3*BA2*C/A BA3/A;-3 -1 0;-1 0 -11; dc( 1:3)=-inv(gy)*gx*dc(4:5);%filr A, B und C A
A
Zu den Hauptschwierigkeiten, die beim Losen von DAGls auftreten konnen, zahlt das Bereitstellen von konsistenten Anfangswerten. Unser DG1-Loser weifi natilrlich ilber die Herkunft unserer filnf DGls nichts, deshalb dilrfen wir so ganz unbedarft nicht vorgehen und etwa unseren bisherigen Anfangswertesatz A0 = [l,O,O,O,O] vorgeben; ein Blick auf das DG1-System zeigt, da5 die Ausdrucke in der ersten Zeile der Matrix g d a n n unbestimmt werden. Es ist also ratsam, als konsistente Werte die Gleichgewichtswerte von A bis C vorher zu berechnen. (Damit gibt es schon einen Hinweis, warum bei komplexeren Systemen es haufig schwierig ist, konsistente Anfangswerte zu finden: Das Losen grofierer nichtlinearer algebraischer Gleichungssysteme ist keine Routineangelegenheit!) Wir berechnen also B mit global A0 A B C D E
AO=l; A=O; B=O; C=O; D=O; E=O; B=fmins('abcdegl',l)
B = 1.1641
erhalten dabei auch A und C (da global, s. ARCDEGL) und berechnen den Konzentrations-Zeit-Verlaufmit
tic;[t,y]=odel5s('abcde2',[0 lOO],[A;B;C;D;E]);toc elapsed-time = 0.3130
Die Ergebnisse sind die gleichen wie in Abb. (4.6). Laat sich das Lbsungsverfahren uberlisten? Man konnte daran denken, den bisherigen Anfangswertesatz zu verwenden, aber filr B und C statt Null kleine endliche Werte zu nehmen, so dafi die Ausdrucke in der ersten Zeile unserer Matrix nicht unbestimmt sind, andererseits aber unsere stochiometrischen Bilanzen noch nicht beeintrachtigt werden. Probieren Sie es aus!
4.4 Probleme und Ldsungen
4.4.4
135
Losung des DAG1-Systems 4.4.1 mit einem DAG1-Loser von MATLAB ab Version 5.3
Ab der Version 5.3 kilnnen mit MATLAB DG1-Systeme der Form
(4.53) auch bei singularer mass matria: B gelilst werden, also DAG1-Systeme. Einschrankung: B darf nicht von den Zustandsvariablen y abhangen. Losungsvorschlag
Fur das Reaktionssystem der vorhergehenden Probleme mit seinen Parameterwerten zeigt das folgende Programm das prinzipielle Vorgehen: y0=[0.6120; 1.1641; 0.3880; 0; O];% konsistente Anfangswerte fiir A, B, C, D und E, s. Problem 4.4.3 % options=odeset( 'Mass','M'); [t,y]=ode15s('a3bcde1,[0 100),yO,options);
Das UP: A3BCDE
function out = a3bcde(t,y,flag) if nargin < 3 I isernpty(f1ag) out=[3*(y( 1)-l)+y(2) 1-Y ( 1)-Y(3)-Y (4)-Y(5) Y(2) ^3*Y(3)/Y(l)-1 100*y(3) ^2-100*~(4)*2-1*~(4) 1*Y(4)1i else switch flag case 'mass' out=diag([O 0 0 1l]);%mass matria: end end
Die Konzentrationen von A, B, C, D und E sind im Vektor y enthalten. Das Gleichungssystem wird Ubergeben, wenn die erste Abfrage zutrifft; es besteht aus den drei algebraischen Gleichungen (bzw. deren rechten Seiten) B-Bilanz, C-Bilanz und der Gleichgewichtsbeziehung f i h den ersten Reaktionsschritt sowie den rechten Seiten der zwei DGls fur die beiden anderen Reaktionsschritte.
136 4 Rffhrkesselreaktoren
4.4.5
Losung des DAG1-Systems 4.4.1 mit SIMULINK unter Verwendung eines ext ernen DAGI-Losers
(***I Es ware schon, wenn SIMULINK ilber einen eingebauten DAG1-Loser verfilgte. (Ab Version 5.3 enthglt MATLAB (nicht SIMULINK!) einen DAG1-Loser mit eingeschrankten Mbglichkeiten.) Bei groi3en DAG1-Systemen konnen sich namlich bei allen bisher vorgestellten Ltjsungsverfahren Schwachen unangenehm bemerkbar machen: Grof3e nichtlineare Gleichungssysteme losen ist ein schwieriges Unterfangen, das haufig genug schiefgeht. 0
0
Das Differenzieren der algebraischen Gleichungen von Hand ist muhsam und extrem fehleranfallig; es erfordert ein symbolisches Verfahren, das die Jacobi-Matrizen liefert, und moglichst auch ein Programm, das die Gleichungen filr das symbolische Verfahren aufbereitet und anschlieoend die gelieferte Jacobi-Matrix in eine von MATLAB verarbcitbare Form konvertiert. Bei den hier betrachteten reaktionskinetischen Sytemen ist das Ersetzen der Gleichgewichtsbeziehungen durch schnelle reversible Reaktionen mit Massenwirkungskinetik noch am einfachsten, solange die Systeme nicht zu grofi und noch iiberschaubar sind.
Es gibt ausgefeilte Programmpakete filr DAG1-Systeme in FORTRAN-Bibliotheken; man konnte sie also benutzen und MATLAB bzw. SIMULINK links liegen lassen. Dann milflte man aber leider auch auf ihre vielen machtigen und bequemen Werkzeuge verzichten, vor allem anderen auf die Online-Visualisierung, denn die ist nun wiederum eine Schwache der Programmiersprachen, zumindest im Vergleich. Warum also nicht die Vorteile verbinden: Man baut einen bewahrten DAG1-Laser in SIMULINK ein und kann dann die komfortablen Einund Ausgabemirglichkeiten von SIMULINK benutzen, gegebenenfalls auch noch andere Bausteine hinzufiigen, z. B. aus der Regelungstechnik. Wie ist das zu bewerkstelligen? Haben Sie eine Idee, wie man einen DAG1-Loser in SIMULINK einbetten kann (oder auch andere Integratoren)?
Losungsvorschlag Man berechnet die Losungen an aquidistanten Zeitpunkten als diskrete Zustande in einer S-Funktion; die Updates macht ein Unterprogramm (,,Kessel" im folgenden Programmausdruck) , das den eingebundenen externen DAG1-Loser jeweils von einem Zeitpunkt zum nachsten rechnen lai3t. Die diskreten Zustandsvariablen werden also nur zum Speichern der Zwischenergebnisse verwendet; auch konstante Werte, die erst im Programm besetzt werden, kann man so speichern (im Beispiel die GroGen BO und CO, die bei den Anfangswerten berechnet werden). Die im folgenden ausgedruckte FORTRAN Mex-,file
4.4 Probleme und LUsungen
137
S-hnction ABCDE-GL.Fzeigt das Vorgehen im einzelnen - der filr SIMULINK gedachte Programmteil beginnt mit dem UP Subroutine Sizes; zum Verstandnis des Programms ist eine Kopie des LIMEX-Programms mit seinen Kommentaren niltzlich2: C C C C C C C C C SUBROUTINE HAUPTPROGRAMM C C
Fuer eine Anwendung a l s FORTRANPROGRAMM ist die Zeile SUBROUTINE HAWTPROGRAMM zu sperren. IMPLICIT DOUBLE PRECISION(A-H.0-Z)
DOUBLE PRECISION Y (9),TI.TEND.Beginn,Ende,Step,Zahl,P(6) INTEGER INUM CHARACTER Name*50 C
C C
C
Zyklus der Aufrufs der numerischen Routine (s) Step = 1.ODO Anf angszeit (s) Beginn = O.ODO Zeitpunkt des Rechenendes (s) Ende = 3600.0DO
***Anf angswerte** * V=l .DO Y(1) = 6.12D-1 Y(2) = 1.16DO Y(4) = O.ODO Y(5) = O.ODO Y(3) = l.DO*V**3*Y(l)/Y(2)**3
Das hier als DAG1-Laser verwendete Programm LIMEX ist - zum nicht-kornmerziellen Gebrauch frei - aus der Bibliothek des Konrad-Zuse-Zcntrums in Berlin erhKltlich. Die Erlaubnis, es in diesem Buch zu benutzen, wurde freundlicherweise erteilt. Die aktuelle Version ist zusammeii mit entsprechenden Beispielen, Installationsanleitungen usw. erh<lich uber http://www.zib.de/ehrig/Codes.
138 4 R Uhrkesselreaktoren
C C
C C
***Geschwindigkeitskonstanten*** k2 P(1) = 1.OD1 k2r P(2) = l.OD1 k3
P(3) = 1.D-1 C P (4)=BO
P (5) =CO
* ** *
*
*
Ausgabedatei
******** INUM
=
Nummer des geoeffneten Kanals
*************
3
Name = 'c:\abcdefdaten.m' OPEN (INUM, file=Name)
* *
*
..................................................... * Schleifenaufruf des 'eigentlichen' Programmes ..................................................... DO 100 Zahl=Beginn,Ende,Step
*
******
Uebergabe der Start und Endzeiten TI = Zahl TEND = Zahl+Step
* *
100
CONTINUE
200
CLOSE(1NUM) FORMAT (35 (e18,9e3,2x)
************
4.4 Probleme und Ldsungen
139
STOP END C***********************************************************
C C C C C C C C C C
Benutzte Variable KI Gleichgewichtskonstante der 1. Reaktion U Inputvektor: 1 Abtastintervall TS, 2 Geschw.-Konstante k2 fuer 2. Hinreaktion, 3 k2r Rueckreaktion , 4 k3 3. Reaktion V Reaktionsvolumen XO Anfangswerte, X diskrete Zustandsvariable fuer SIMULINK, Y kontinuierliche Zustandsvariable fuer LIMEX Indizes: 1 bis 5: A bis E; 6 Summe stoechiometrische B-Bilanz; 7 Summe stoechiometrische C-Bilanz; 8 Abtastzeit (TI)
C*********************************************************** C***********************************************************
C Hinzu kommen die LIMEX-Variablen, die im C LIMEX-Programm erklaert sind. C***********************************************************
C
SUBROUTINE SIZES(S1ZE) . . Array arguments .. INTEGER*4 SIZE(*)
C==---------------------------------------------------------________________________________________-----
C C C C C C C C C C C C C C C C C C C
Purpose: Function to set size vector Input arguments: None Output arguments: SIZE a vector of model sizes Description: Sizes returns a vector which determines model characteristics. This vector contains the sizes of the state vector and other parameters. More precisely, SIZE(1) number of continuous states SIZE(2) number of discrete states SIZE(3) number of outputs SIZE(4) number of inputs SIZE(5) number of discontinuous roots in the system SIZE(6) set to I if the system has direct feedthrough of its inputs, otherwise 0 Copyright (c) 1990-93 by the Mathworks, Inc.
...........................................................
140 4 Ruhrkesselreaktoren
C
C C C
. . Parameters . . INTEGER*4 NSIZES PARAMETER (NSIZES=6) . . Local scalars .. . . Local arrays . . . . Executable statements . . SIZE(1) = 0 SIZE(2) = 8 SIZE(3) = 5 SIZE(4) = 4 SIZE(5) = 0 SIZE(6) = 0 RETURN END SUBROUTINE INITCOND(X0) IMPLICIT DOUBLE PRECISION(A-H,O-Z)
C
. . Array arguments . . REAL*8 XO(*)
c--------------------------------========================= C C C C C C
Purpose: Function to set initial condition vector Input arguments: None Output arguments : xo a vector of initial conditions
c============-------=-====================================== C . . Local scalars . . C . . Local arrays . . C . . Executable statements . . C C C C C C
KI=l XO(1) bis XO(5) entspricht A bis E XO(6) entspricht der B-Bilanz (BO) und XO(7) der C-Bilanz (CO) XO(8) entspricht der Abtastzeit (TI) V ist das Reaktionsvolumen V=i .DO XO(1) = 6.12D-1 XO(2) = 1.16DO XO(4) = O.ODO XO(5) = O.ODO XO(3) = l.DO*V**3*XO(l)/X0(2)**3 XO(8) = O.DO XO(7) = XO(i)+XO(3)+XO(4>+XO(5>
4.4 Probleme und Ldsungen
XO(6) = 3.DO*XO(i)+X0(2) RETURN END
C C
SUBROUTINE DERIVS(T, X, U, DX) . . Scalar arguments .. REAL*8 T . . Array arguments .. REAL*8 X(*), U(*>, DX(*)
..............................................................
C
C C C C C C
C C C C
C C
Purpose: Function to return derivatives Input arguments: T time X state vector U input vector Output arguments: DX state vector derivatives Remark : The state vector is partitioned into continuous and discrete states. The first states contain the continuous states, andthe last states contain the discrete states.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C C
. . Local scalars
C
..
..
..
Local arrays .. Executable statements
..
RETURN END
C C
C
SUBROUTINE DSTATES(T, XI U, XNEW) IMPLICIT DOUBLE PRECISION(A-H.0-Z) . . Scalar arguments . . REAL*8 T . . Array arguments .. REAL*8 X(*>, U(*), XNEW(*) common/Base/ kllklrlk21k2r,k31V,B0,COlk41
IVSTRl,VSTR2,VSTR3,VSTR4
C C C
C
Purpose: Function to perform discrete state update Input arguments: T time
141
142 4 Riihrkesselreaktoren
C C C C C C C
C C
X state vector U input vector Output arguments: XNEW next state values Remark : The state vector is partitioned into continuous and discrete states. The first states contain the continuous states, and the last states contain the discrete states.
............................................................... .. Local scalars . . C . . Local arrays . . C . . Executable statements . . C DOUBLE PRECISION Y(S),P(G),TI.TEND INTEGER I
300
DO 300 I=1,3 P ( 1 ) = U(I+I) CONTINUE
500
DO 500 I=1,7 Y(1) = X(1) CONTINUE CALL Kessel(TI,TEND,Y,P)
700
DO 700 I=1,7 XNEW(1) = Y(1) CONTINUE XNEW(8) = TEND RETURN END SUBROUTINE Kessel(TI,TEND,Y,P) Implicit DOUBLE PRECISION (A-H,O-Z) DOUBLE PRECISION Y (9),RW(4IO), kl ,klr,k2,k2r,k3,k4,V,BO 1 CO,VSTRI,VSTR2,VSTR3,VSTR4,P(G) INTEGER IW ( 5 0 ) ,IJOB ( 13) ,I EXTERNAL FCN,LSC,JAC,JDUM
4.4 Probleme und Ldsungen
143
common/Base/ kl,klr,k2,k2r,k3,V,BO,CO,k4,VSTFtl,VSTR2, *VSTR3,VSTR4
BO = Y(6) CO=Y(7) V=l .DO k2 = P ( 1 ) k2r = P ( 2 ) k3 = P(3)
c ........................................................... C *
LIMEX PARAMETER
c ...........................................................
*
N=5 NZC=2 NZV=1 RTOL=I.D-6 YMAXO=l.DO HMAX=TEND-TI H=O
.
NRW=410* 2 NIW=50*2 IJOB (1)=O IJOB(2)=0 IJOB(3)=O IJOB(4)=0 IJOB(5)=0 IJOB(6) =O IJOB(7)=0 CALL LIMEX(N,NZC,NZV,LSC,FCN,JAC,TI,Y,TEND,RTOL,YMAXO,HMAX,H,IJOB, 1 NRW.RW,NIW,IW) RETURN END
c ............................................................. C * C * C *
SUBROUTINE FUNCTION (FCN) Y(1) = NA, Y(2) = NB, Y(3) = NC, Y(4) = ND, Y(5) = NE NA steht fuer Molzahl A usw.
c ............................................................. SUBROUTINE FCN (N,NZV,T,Y,DY,BV,IRV,ICV)
* * *
144 4 Rrihrkesselreaktoren
IMPLICIT DOUBLE PRECISION(A-H, 0-2) DOUBLE PRECISION kl,klr,k2,k2r,k3,k4,V,VSTR1,CO,HILF, I VSTR2,VSTR3 DIMENSION Y(N) ,DY(N) .BV(~) ,IRV(i) ,ICV(1) common/Base/ kl,kir.k2,k2r,k3,V,BO,CO,k4,VSTR~,VS~2, *vsTR3,vsTR4
***
C23456
Bilanzgleichungen
***
- 1.DO
DY(1) =Y(2)**3*Y(3)/Y(l)/V**3 DY(2) =3.DO*Y(i)+Y(2)-BO
DY(4)
=
2.DO/V*(k2*Y(3)**2
-
k2r* (4)**2) -k3*Y (
DY(5) = k3*Y(4) BV( I ) =O .DO IRV(1)=1 Icv (I) =I
RETURN END
***
C C
SUBROUTINE CONSTANT PART OF LEFT MATRIX
SUBROUTINE LSC (NZC,BC,IRC,ICC) IMPLICIT DOUBLE PRECISION(A-H,O-Z) INTEGER J,I DOUBLE PRECISION BC(N2C) DIMENSION IRC(NZC) ,ICC(NZC) BC(l)=I.DO IRC( 1) =4 ICC(1)=4 BC(2)=1.DO IRC(2)=5 ICC(2) =5
***
4.4 Probleme und Losungen
RETURN END C SUBROUTINE JAC (N,MB,T,Y,YP,A) IMPLICIT DOUBLE PRECISION(A-H,O-Z) DOUBLE PRECISION Y(N) ,YP(N) ,A(MB,N) DOUBLE PRECISION kl,klr,k2,k2r,k3,k4,V,VSTRI,BO,CO,HILF, 1 VSTR2.VSTR3 common/Base/ kl,klr,k2,k2r,k3,V,BO,CO,k4,VSTRl, 1 VSTR2,VSTR3,VSTR4
RETURN END C SUBROUTINE JDUM (N ,MB ,T,Y,YP,A) IMPLICIT DOUBLE PRECISION(A-H,O-Z) RETURN END
C C
*** SUBROUTINE LIMEX *** hier folgt das vollstaendige LIMEX-Programm
SUBROUTINE OVTPUT(T, X. U, Y) C . . Scalar arguments .. REAL48 T C . . Array arguments .. REAL48 X(*), U(*>, Y(*> .......................................................... C Purpose: C Function to return continuous outputs C Input arguments: C T time C X state vector C U input vector C Output arguments: C Y output vector C Remark : The state vector is partitioned into continuous C C and discrete states. The first states contain C the continuous states, and the last states contain C the discrete states. ...........................................................
145
146 4 Rlihrkesselreaktoren C C C
.. ..
..
Local s c a l a r s . . Local a r r a y s . . Executable s t a t e m e n t s
.
RETURN END
C
c
SUBROUTINE DOUTPUT(T, X, U , Y) . . S c a l a r arguments . . REAL*8 T . . Array arguments . . REAL*8 X(*>, U(*>, Y(*)
C---------------------------------------------------------.................................................
C C C C
C C C
Purpose: Function t o r e t u r n d i s c r e t e o u t p u t s Input arguments : T time X s t a t e vector U input v e c t o r Output arguments : Y output v e c t o r Remark : The s t a t e v e c t o r i s p a r t i t i o n e d i n t o continuous and d i s c r e t e s t a t e s . The f i r s t s t a t e s c o n t a i n t h e continuous s t a t e s , and t h e l a s t s t a t e s c o n t a i n t h e d i s c r e t e states. This procedure i s c a l l e d only i f it is a sample h i t .
C C C C C C C C====--------=====----------=============================== C C C
5
C C
Local s c a l a r s . . Local a r r a y s . . Executable statements DO 5 I = 1 , 5 Y(1) = X(1) CONTINUE RETURN END
.. .. ..
..
SUBROUTINE TSAMPL(T, X, U , TS. OFFSET) . . S c a l a r arguments . . REAL*8 T,TS,OFFSET . . Array arguments . . REAL*8 X(*>, U(*>
........................................................... C C C
Purpose: Function t o r e t u r n t h e sample and o f f s e t times Input arguments :
4.4 Probleme und Losungen
C C C C
147
T X U
time state vector input vector Output arguments: C TS sample time (Abtast-Intervall!) C OFFSET offset time C===================PDEZD===I=I==================================== C .. Local scalars .. C . . Local arrays .. C . . Executable statements . . TS = U(1) OFFSET = 0. RETURN END
C C C C
C C C C
Purpose: Function to return singularities Input arguments: T time X state vector U input vector Output arguments: SING singularities
........................................................... C
C C
.. .. ..
Local scalars . . Local arrays . . Executable statements
..
RETURN END
Das Muster far diese FORTRAN MEX-file S-function stammt noch aus der SIMULINK-Version 1.3. Ausgaben wahrend des Rechenlaufs, auch Fehlermeldungen, fiihrten in den neuen SIMULINK-Versionen 2.x leider dazu, d d sich samtliche MATLAB-Fenster schlossen. Deshalb wurde im Programm ABCDE-GL.F die Mbglichkeit geschden, es in der Testphase als FORTRAN-EXE Programm laufen zu lassen; das fehlerfreie Programm kann dann nach Loschen
148 4 Ruhrkesselreaktoren des Kommentarzeichens ,,C'' in der Zeile ,,Subroutine Hauptprogramm '' in eine FORTRAN MEX-file S-function compiliert werden. Das SIMULINK-Model1 mit der so erzeugten dll-Datei im S-Function-Block ist ABCDE-GL-SYS.MDL.
4.4.6
Einstellen der Regler a m Reaktionskalorimeter fur die Sulfonierung von Nitrobenzol (*, nicht SE)
siehe ErlButerungen im Abschnitt 4.2 sowie Problem 4.4.8.
Losungsvorschlag Einstellen der Regler: Standardwerte Kritischer Wert von PIDl(1) ca. 2.1; Periode ca. 4.8. (Htingt das Verhalten vom FUllstand ab?) Daraus ergibt sich nach Ziegler-Nichols:
PIDl(1)=0.45*2.1;PID1(2)=4.8/1.2; Die Zieler-Nichols-Regeln liefern nur Anhaltswerte. Die Regelung der Reaktortemperatur wird mit diesen Einstellungen erst gut, wenn man auch die Manteltemperatur wenigstens mit einem P-Anteil von etwa 5 in die Ntihe des Sollwerts von 363.16 K bringt. Sehr gut wird die Regelung, wenn man alle drei Anteile des Regiers nach Ziegler-Nichols einstellt . Die Abb. 4.9 zeigt, wie die Manteltemperatur beim kritischen Wert des Proportionalteils von etwa 8 in Dauerschwingungen iibergeht:
28%
500
1000 t Ins
1500
2 00
Abbildung 4.9:Dauerschwingungen der Manteltemperatur im geschlossenen Regelkreis bei einer Verstbkung von 8 (PID2(1)).
4.4 Probleme und Lasungen
149
Mit den Reglereinstellungen
PID1=[0.45*2.1 4.8/1.2 0); PID2=[0.45*8 50/1.2 01; wird das in Abb. 4.10 gezeigte Regelverhalten bei Standardeinstellungen (ohne Zulauf) erzielt:
;\
380-
Abbildung 4.10: Einschwingen von Reaktor- und Manteltemperatur (untere Kurve). PI-Regler , eingestellt nach Ziegler-Nichols.
4.4.7
Verlustleistung des Reaktionskalorimeters bei den Bedingungen des Problems 4.4.6 (*, nicht SE)
Ein Versuchslauf mit den optimierten Reglereinstellungen, dessen Ergebnis in der Abb. (4.10) dargestellt ist, lat sich zur Abschlitzung der Verlustleistung auswerten. Losungsvorschlag
Mehr als eine Abschlitzung ist kaum moglich, da die Verlustleistung in der Gr6flenordnung von 1 % der tibertragenen Wxrmemenge liegt. Es ist q a e c = m p j * ~ * ( T j - T-uz ~)
(4.54)
150 4 Rilhrkesselreaktoren Da man die vom Riihrer eingetragene Leistlmg iiber das Drehmoment an der Achse bestimmen kann (qrvm), ergibt sich die eigentliche Verlustleistung aus der Differenz qsec- qrvrn; im vorliegenden Fall erhalt man ca. 3e-04 kW.
4.4.8
Sulfonierung von Nitrobeneol mit Oleum im leistungskompensierten Reaktionskalorimeter mit Differentialkuhlung (*, nicht SE)
Anleitungen fur diesen Versuch finden Sie im Text, irn Info-System und in den vorhergehenden Problemen 4.4.6 und 4.4.7. Bevor man einen Versuch im Reaktionskalorimeter ansetzt, wird man sich durch mikrokalorimetrische Methoden Anhaltspunkte iiber die kalorischen Verhaltnisse des Reaktionssystems verschaffen. Abb. 4.11 zeigt eine (entschmierte) DSC-Kurve der Sulfonierung von Nitrobenzol mit Oleum.
Abbildung 4.11: DSC-Messung der Sulfonierung von Nitrobenzol. Heizrate 5 K/min, nO = [0.0200 0.0308 0 0.1006]e-03 mol.
Losungsvorschlag Aus der DSC-Messung kann man leicht eine Reaktionsenthalpie von etwa 90 kJ/mol abschatzen. Weiterhin kann man die Warmeproduktionsrate Umsatz und Temperatur zuordnen; man wird z. B. bei 373 K ca. 120 W erreichen, wenn man - gemafi dem Umsatz von ca. 20 % an dieser Stelle - 0.8 mol Nitrobenzol vorlegt und 1.34 mol SO3 bzw. die entsprechende Menge Oleum sehr schnell dosiert.
4.4 Probleme und Losungen
151
Wenn wir eine Dosierzeit von etwa 10000 s vorsehen, erzeugen wir bei der Standardvorlage von 2 mol eine durchschnittliche Wtirmeproduktionsrate von 10 W/mol (bezogen auf Einwaage, das ist in der Kalorimetrie so iiblich); bei einer sehr schnellen ( ,,dosierungskontrollierten") Reaktion miiBten wir also mit etwa 20 W rechnen, filr die nach unserer Abschiitzung aus dem Vorversuch auch im Anfang 6 K Temperaturdifferenz ausreichen warden. Die Sulfonierung eines Nitro-Aromaten ist aber eine langsame Reaktion, bei der eine Akkumulation des dosierten Reaktanden und damit ein Maximum der Wiirmeproduktionsrate zu erwarten ist. Versuchen wir es mit 10 K Temperaturdifferenz: Tjsp=363.16;Tu=Tjsp; tdos= 11000;npO( n kz)=ndos/tdos; tdos0=1000;
Die Reglereinstellungen nach Ziegler-Nichols miissen gegebenenfalls noch etwas verandert werden, denn sie sind auf einfache PID-Regler zugeschnitten und beriicksichtigen nicht die zusiitzlichen Maanahmen in den hier verwendeten Reglern mit anti-windup. Nach dem Versuchslauf bis 22000 s blenden wir am besten die Anfangsphase aus: [i ,j]=find( sy(: , l ) >=tdosO); syr=sy( i , :); Dann ermitteln wir den mittleren cp-Wert des Kiihlmittelzulaufs: cpj=fcpj ((syr(: ,8)+syr(: ,9))/2);%FCPJ cpj=sum( cpj)/size( cpj, 1)
%(cpj=fcpj(Tjsp) hiitte auch geniigt, schliealich haben wir nur Differenzen in der Groaenordnung von 0.1 K)% qr=mpj*cpj*(syr(: ,8)-syr(: ,9))-syr(: ,5)-syr(: ,4)+3e-O4;%DieTerme sind Tj , T;, ui,qrvm und die Verlustleistung.%
Das Ergebnis ist im rechten unteren Teilbild von Abb. (4.12) zu sehen. Die Regelabweichungen in diesem Versuch gehen kaum fiber K hinaus - das ist etwa die Auflbsungsgrenze von Pt-100-Thermometern. Man mua allerdings erwahnen, daB der Verlauf der entsprechenden Signale im realen Experiment nicht so glatt ist wie in Abb. (4.12). Man kbnnte die Modellierung noch weiter treiben, Stbrsignale einbauen oder MeBinstrumente wie z. B. ADWandler modellieren - darauf wurde hier verzichtet, zumal man fiir ein solches Unterfangen die Hilfe eines MSR-Spezialisten kaum entbehren kann. Um den Umsatz vollsttindig zu machen, kbnnten wir schneller dosieren; da dann das Maximum von q,. spiiter kommen wird, also bei schon grbflerer Fiillung, werden wir mit 10 K Temperaturdifferenz T, - Tj wahrscheinlich auskommen. Far einen weiteren Versuch mit schnellerer Dosierung zeigt das ntichste Bild (Abb. 4.13) die Wiirmeproduktionsrate; die Auswertung dieses Ergebnisses im Hinblick auf thermodynamische und kinetische Daten ist in Abschnitt 7.3.2 beschrieben.
152 4 Rtihrkesselreaktoren
0
.
2
7
,
Y
.-c
4
tk-.
-1
-
0
4
2
OO
4
2
1U4t
-OO
in s
2
4
1u41 in s
Abbildung 4.12: Versuch mit Reaktion im Reaktionskalorimeter. Oberes linkes Teilbild: Abweichung vom Sollwert (- T,., - - Ti);oben rechts: Tj - T:; unten links: Leistung der Kompensationsheizung; unten rechts: Wiirmeproduktionsrate.
0.041 0.0350.03-
3 0.025Y
.-c 0.02mL
0.0150.01 -
0.005-
OO
0.5
1 1.5 1U41 in s
2
1
.5
Abbildung 4.13: Wiirmeproduktionsrate der Sulfonierung bei einer Dosierdauer von 5000 Sekunden.
153
4.4 Probleme und Ldsungen
4.4.9 W5rmeubergangskoeffizienten im wandgekuhlt en Riihrkessel durch Modellversuche im Reaktionskalorimeter (*, nicht SE) Bei dem hier simulierten, streng isotherm arbeitenden Reaktionskalorimeter kann man den Warmedurchgangskoeffizienten aus der stationaren Bilanz (4.55) erhalten und iiber den gesamten Reaktionsverlauf verfolgen. Selbst wenn sich der Warmeiibergangskoeffizient a, im Reaktor stark andert, kann man das Temperaturprofil zwischen Reaktor und Ktihlmantel als quasi-station& behandeln - vielleicht von ganz extremen Bedingungen abgesehen. Aus hfolgt a,, wenn kennt. Die beiden letzten GroBen kbnman aj und den Term fiir die Wand, nen bei gegebenen Bedingungen zu einer Apparatekonstante zusammengefdt werden, die man aus einem Wilson-Plot erhalten kann; das Verfahren geht aus der nachstehenden Gleichungsfolge hervor:
-&,
1 h
-
1 s , 1 1 -+-+-=-++(Tj) a, X aj CY,
(4.56)
(4.58) Die letzte Gleichung liegt dem Wilson-Plot zugrunde: In einem nichtreagierenden System ermittelt man h bei verschiedenen Riihrerdrehzahlen rum und den gewiinschten Werten der Temperaturen T, und Tj und gewinnt die Apparatekonstante durch lineare Regression. Mit dieser Aufgabe wird der Leser sich selbst iiberlassen. Es sei nur noch darauf hingewiesen, d d im wirklichen Experiment die Werte oft stark um die Wilson-Gerade streuen, besonders, wenn der Warmedurchgangswiderstand von den beiden anderen Termen dominiert wird, wie es in dickwandigen Glasgefaen zu sein pflegt; a, ist dann nur schwierig genau genug zu bestimmen.
+
4.4.10 Produktivitatssteigerung bei einer technischen
Cyanethylierung (* *) Diese Aufgabe stiitzt sich auf die Verbffentlichung [12]. Die Cyanethylierung eines Amins wird zur Zeit nach folgendem Ablauf durchgeftihrt: Das Amin wird in einem wandgekiihlten 6,3-m3-Rilhrkessel bei 40 “C vorgelegt und das Acrylnitril mit 20 OC innerhalb von 5 Stunden bei konstanter Temperatur zugegeben. Mit den Zeiten fiir das Laden und Entleeren des Kessels betragt die Zykluszeit 6 Stunden, aus der bei einer Ansatzgroae von 6 t eine Produktivitat von 1 t/h folgt. Es sol1 untersucht werden, ob die P r e duktivitat gesteigert werden kann. Aus Griinden der Produktqualitat darf eine Temperatur von 80 “C nicht iiberschritten werden.
154 4 Rtihrkesselreaktoren
Tabelle 4.2: Daten zur Cyanethylierung. End-Reaktionsmasse (ERM) 6000 kg Dichte 900 kg/m3 Reaktionswarme 396 kJ/kg ERM cp der ERM 2,300 kJ/(kg K) Dosierte Masse CP
Warmedurchgangskoeffizient
1919 kg 1,900 kJ/(kg K) 0,440 kW/(m2 K)
Anfangstemperat ur Temperatur Kiihlmantel Dosiertemperatur
40 "C
m a . Fiillvolumen des Kessels min. Fiillvolumen m u . Kiihlflache min. Kuhlflache
5,5 m3 1 m3 10 m2 3.2 m2
30 "C 20 "C
Es bietet sich an, die Zulaufzeit des Acrylnitrils zu verkurzen und bei hijherer Temperatur zu arbeiten. Um die Erfolgsaussichten beurteilen zu konnen, miissen einige thermodynamische und kinetische Groijen ermittelt werden: die Reaktionswgrme, die spezifischen Warmen des Reaktionsgemisches und des Acrylnitrils sowie der Warmedurchgangskoeffizient; auijerdem mui3 die Kinetik der Reaktion untersucht werden. All das kann mit einigen gezielten Experimenten in einem Reaktionskalorimeter geschehen. Kalorische Ergebnisse sind in der folgenden Tabelle 4.2 enthalten; die kinetischen Untersuchungen zeigen, daij die Reaktion sehr schnell ist: Es findet keine merkliche Akkumulation von Acrylnitril statt, nicht unter den bisherigen Betriebsbedingungen und auch nicht unter scharferen Bedingungen, namlich bei 40 und 80 "C mit jeweils 1 Stunde Dosierzeit. Mit anderen Worten: Im abgesteckten Bereich ist die Reaktion dosierungskontrolliert . Da die Geometrie eines Kiihlmantels nicht ganz simpel ist, sei hier ein Zusammenhang zwischen Volumen der Reaktionsmasse und Kiihlflache angegeben:
F, = 2.7348
+ 1.2845V
(4.59)
Anhand dieser Daten sol1 die Produktivitat optimiert werden.
Losungsvorschlag Da die Fiill- und Leerzeiten vorgegeben sind, lauft die Aufgabe darauf hinaus, die Dosierzeit zu optimieren, d. h. unter Beachtung der Randbedingungen zu minimieren.
4.4 Problerne und Ldsungen
155
Wir folgen zungchst dem Lbsungsweg in [12]. Dort werden die entsprechenden Bilanzgleichungen numerisch gelbst (nach dem Newton-Verfahren mit einem Tabellenkalkulationsprogramm!) und in mehreren Laufen die Dosierzeit gesucht, die den Temperaturverlauf von der Anfangstemperatur bis an die obere Grenze von 80 "C filhrt. Wir machen einen solchen Simulationslauf, benutzen aber naturlich einen DG1-Loser von MATLAB; dazu geben wir eine Dosierzeit vor (in Stunden), rufen dann das Datenfile STOESSEL.DAT auf, das alle benotigten Daten aus der Tabelle setzt und die Dosierzeit in Sekunden umrechnet, und starten die L6sung der DG1 mit der ilblichen MATLAB-Befehlszeile. Wie man in dieser Zeile sieht, heifit das Unterprogramm fUr die DG1 STOESSEL2; es ist anschliei3end ausgedruckt , so dai3 man die wohl selbsterklarenden Anweisungen sehen kann; die DG1 ist so einfach, dai3 ihre codierte Form geniigen sollte; die Bedeutung der Variablennamen geht aus STOESSEL.DAT hervor: STOESSEL:!
function dx = stoessel2(t,x) global mO rho mdos delh cp cpdos Tdos TO h Tc dR mpdos tdos pol T=x; m=mO+t*mpdos; V=m/rho; F=pol( 2)+p0f ( l)*V; if F >= 10
F=10; end dx=( mpdos*(-del h)-h*F*( T-Tc)-mpdos*cpdos*(T-Tdos))/m/cp; Man gibt nun ein: global tdos
td0~=2.65; stoesseldat [t,y] =ode45( 'stoessel2', [0 tdos*3600],TO); Wie der Temperaturverlauf in Abb. 4.14 zeigt, haben wir praktisch die o p timale Dosierzeit gewahlt; das wird i. a. nicht gelingen, man wird vielmehr wenn man der Literaturvorlage folgen will - eine Reihe von Simulationsrechnungen machen milssen, bis man die optimale Dosierzeit trifft. Geschickter warire es, die Suche nach der optimalen Dosierzeit von einem Optimierprogramm machen zu lassen oder wenigstens zwischen einigen wenigen Simulationsl&ufen zu interpolieren; beide Wege werden im folgenden Problem angesprochen. Der Losungsweg der Literaturvorlage, den wir hier ilbernommen haben, filhrt noch nicht zur optimalen Produktivitat. Genauer gesagt: Es wurde noch eine andere Randbedingung beachtet, die aber nicht genannt wurde: Die Dosierrate wurde zwar als variabel angesehen, aber nicht innerhalb eines Produktionslaufs. Lassen Sie uns sehen, ob man durch Steuerung der Dosierrate, also durch eine Dosier-Trajektorie nicht ein noch besseres Ergebnis, eine hohere Produktivitat,
156 4 Rifhrkesselreaktoren
9
0
80-
2000
4000
tins
6000
8000
1( I00
Abbildung 4.14: Simulationslauf der Cyanethylierung.
erzielen kann. Das ist nicht schwer zu erkennen: Vom Start bis zum Erreichen der oberen Temperaturgrenze sollte man mit maximaler Dosierung fahren, dann die Dosierung so steuern, dafl man sich an dieser Grenze bewegt. Natiirlich kann man die Dosierrate nicht beliebig hochtreiben: Nicht nur miissen die Dosiereinrichtungen das hergeben, sondern insbesondere m d die Vermischung im Riihrkessel (nahezu) ideal bleiben. Nehmen wir an, die maximale Dosierrate entspreche einer Dosierzeit von 0.5 Stunden, dann kann uns das Programm STOESSEL3 das optimale Ergebnis liefern: STOESSELQ
function dx = stoessel3(m,x) global mO rho mdos delh cp cpdos Tdos TO h Tc dR mpdos ... tdos pol Tmax mpmax t=x( l);T=x(2); V=m/rho; F=p0l(2) +pol (1)*V; if F >= 10 F=lO; end if T < Tmax mpdos = mpmax; dx(2)=((-del h)-h* F*(T-Tc)/mpdos-cpdos*(T-Tdos))/m/cp; else
%T=Tmax: berechne mpdos aus der stationgren Warmebilanz ( d T / d t = O)!%
4.4 Problerne und L6sungen
157
rnpdos= h*F* (T-Tc)/( (-del h)-cpdos*(T-Tdos)) ; dx(2)=( (-delh)-h*F*(T-Tc)/rnpdos-cpdos*(T-Tdos))/rn/cp; end dx( l)=l/mpdos; dx=dx' ;
Wie man sieht, wird jetzt nicht ilber die Zeit t, sondern iiber die Masse m integriert: Die Wiirmebilanz wird durch Division durch mpdos entsprechend umgeformt. Da es bequem ist, gleich den Zusammenhang zwischen t und m zu bekommen, wird die Zeit als zustitzliche abhtingige Variable neben T eingefilhrt. Wir starten wieder: global tdos
td0~=0.5; stoesseldat [rn,y]=ode45('stoessel3',[rnO 60001,[O;TO]); plot(y(:,1)/3600,y(:2 ) )
Abbildung 4.15: Optimaler Temperaturverlauf bei der Cyanethylierung.
Die Dosierzeit kann mit variabler Dosierrate also noch weiter reduziert werden, wie aus Abb. 4.15 hervorgeht. Allerdings ist der Effekt in diesem Fall nicht groi3: Er wiirde kaum die Umrilstung einer Anlage auf automatisch gesteuerte Dosierung rechtfertigen; Steuerung im Handbetrieb wilrde wahrscheinlich als zu unsicher eingestuft. Ein reaktionstechnisches Optimum ist eben i. a. nicht
158 4 Rifhrkesselreaktoren gleichbedeutend mit einem Gesamtoptimum; meist mussen zusatzlich noch weitere Kriterien berlicksichtigt werden: wirtschaftliche, sicherheitstechnische, 6kologische, um die wichtigsten zu nennen.
4.4.11
Produktivitatssteigerung bei einer technischen Cyanethylie-rung (2) : optimale Dosierzeit bei konstanter Dosierrate (*)
In dem vorigen Problem sol1 die optimale Dosierzeit bei konstanter Dosierrate gesucht werden. Zwei LBsungsmbglichkeiten sind im dortigen LGsungsvorschlag schon g e nannt : entweder eine Optimierroutine anwenden oder zwischen den Ergebnissen mehrerer Simulationslaufe interpolieren. Wir beschranken uns hier auf den zweiten Weg; Optimierungen auf dem ersten Weg kommen noch haufig genug in diesem Buch vor, und aufierdem ist der Rechenaufwand auf dem zweiten Weg bei dem hier vorliegenden kleinen Problem etwas geringer.
Losungsvorschlag Wir wghlen also einige Werte filr tdos, berechnen den Temperaturverlauf und bestimmem den maximalen T-Wert in der Ttajektorie : global tdos td0=1:3; for i = 1:3 tdos=tdo( i); stoesselda t [t,y]=ode45( 'stoessel2', (0 tdos*3600] ,TO); Tmax( i)=max(y); end
Dann interpolieren wir einfach linear:
topt=interpl(Tmax,tdo,80) topt = 2.7588
Eine Interpolation mit einem kubischen Spline bringt in diesem Fall auch kein anderes Ergebnis (bitte ausprobieren mit Schalter cubic in interpl!).
4.4.12
CSTR - Chemostat (*)
S reagiert mit C autokatalytisch gernafi S + C --+ 2C. Die Reaktionsgeschwindigkeit ist T = k c s c c / ( l + K c s ) mit k = 0.25 1 / (g hr), K = 0.5 1 / g.
4.4 Probleme und Ldsungen
159
In einem CSTR rnit vorgegebenem Volumen V sol1 muglichst vie1 C produziert werden. Es wird S mit 50 g / 1 zugefiihrt, aber kein C. a) Gibt es eine untere Grenze fth die Verweilzeit? Wenn ja, wie groa ist sie? b) Wie groB ist die optimale Verweilzeit? c) Wieviele Kessel gleicher GrUae V milaten bei der optimalen Verweilzeit hintereinandergeschaltet sein, damit die Konzentration von S auf 1g / 1 reduziert wird? d) Uberzeugen Sie sich, d d dieses Beispiel vollig identisch ist mit einem stationaren Monodschen Chemostat , in dem aus einem limitierenden Substrat S Zellmasse C gebildet wird mit der Sterberate Null. Wie groa sind der Ausbeutefaktor, die maximale Zellwachstumsrate, die (formale) Michaelis-MentenKonstante, die optimale Verdiinnungsrate und die Auswaschungsrate? Losungsvorschlag
a> Wir schreiben den Lbsungsweg gleich in MATLAB-Anweisungen, wobei mit den Komponentennamen die Konzentrationen gemeint sind: syms SO S tau k C K bii=(SO-S)/tau-k*S*C/(
l+K*S);%S-Bilanz fur den CSTR;
bilC=subs(bil,C,SO-S);%Wir ersetzen C gernaO der C-Bilanz durch S% Ss=solve(bilC,S);%und losen die Bilanz nach S auf. ss =
c
so1
[ l/(-K+k*tau)]
Die erste Losung ist trivial. Aus der zweiten LUsung sehen wir, daa tau nicht beliebige Werte annehmen kann: grufier als SO kann S im Ablauf nicht werden! Wir lasen die Bilanzgleichung fiir S nach tau auf und ersetzen dann S durch SO; das ergibt den Minimalwert fiir tau, taumin: taul=solve( bilC,tau); taumin=subs(taul,S,SO);
taumin = (l+K*SO)/SO/k Den numerischen Wert berechnen wir unter b). Die bisherigen Rechnungen htitten wir leicht auch mit Bleistift und Papier machen konnen. Bei den folgenden Rechnungen ist die Symbolic Math Toolbox, die wir hier mehr zur Ubung verwendet haben, eine willkommene Erleichterung. b) Die optimale Verweilzeit ergibt sich aus der Optimierung der Raum-ZeitAusbeute C/tau; wir bilden diesen Ausdruck, leiten ihn nach tau ab und bestimmen die Nullstelle(n):
160 4 Rffhrkesselreaktoren
c=so-SS( 2); Ctau=C/tau; dCtau=difF( Ctau,tau); topt=solve( dCtau,tau);
topt = [: 1/2/SO* (2+2*K*S0+2*(l+K*SO) (1/2) /k] [ 1/2/SO*(2+2*K*SO-2*(1+K*SO)-(l/2))/k] S0=50; k=.25;K=.5; topt n =su bs(topt); % Der nu rnerische Wert
toptn = 2.4879 1.6721
Jetzt benatigen wir zur Entscheidung zwischen den beiden Losungen der quadratischen Gleichung auch den numerischen Wert der minimalen Verweilzeit, den wir aus dem unter a) abgeleiteten Ausdruck ftir taumin erhalten: tauminn=subs(taurnin); tauminn =
2.0800
Also ist der erste Wert von toptn die optimale Verweilzeit. c) Schon im bzw. nach dem zweiten Kessel ist die Konzentration von S auf 0.293 g/l abgesunken. Die einfache Rechnung, die zu diesem Ergebnis fiihrt, sei dem Leser iiberlassen.
4
Ausbeutefaktor ((Menge C gebildet) / (Menge S umgesetzt)) ist durch die 1. Monod-G1 gegeben: p= p m a s S / ( K ~ S ~) , also: maximale Zellwachstumsrate pmas = k / K , Michaelis-Menten-Konstante K M M= 1 / K . Optimale Verdiinnungsrate Dopt = l / ~ ~Auswaschungsrate ~ t . D,, = 1/7,in.
+
4.4.13
Exotherme Reaktion im wandgekuhlten CSTR (**)
Die Reaktion A --$ B mit T = k c i sol1 in einem wandgekiihlten kontinuierlichen Ruhrkessel durchgefilhrt werden. Das System ist durch folgende Parameter gekennzeichnet: Zulauftemperatur To = 298 K, maximale adiabatische Temperaturerhbhung AT,, = 175 K , Stanton-Zahl St = 3, Damkohler-Zahl ohne den Faktor exp( - E / R / T ) Dam = le13, E / R = 10000 K. Es wird ein Umsatz von 60 % gefordert. Sind dann die anderen Groflen festgelegt? Wenn ja, welche Temperatur stellt sich im Reaktor ein und wie mui3 die Kuhlmantel-Temperatur eingestellt werden? 1st der Betriebspunkt stabil? Wie sieht das Anfahrverhalten aus, wenn man B bei 298K vorlegt und dann den Zulauf einstellt? Wie sieht
4.4 Probleme und Ltlsungen
161
das Anfahrverhalten aus, wenn man A vorlegt und zuniichst ohne Zulauf bis zum Umsatz von 60 % reagieren l a t , wobei die zugehbrige stationiire Temperatur iiber eine Regelung gehalten wird, sobald sie erreicht ist, wenn man also im stationaren Betriebspunkt startet? Losungsvorschlag Zur ersten Frage: Die stationiiren Formen der dimensionslosen Bilanzgleichungen zeigen, d d nur die Reaktortemperatur T und die Grbae T, unbekannt sind; in T, ist nur die Manteltemperatur TM unbekannt: Also haben wir zwei (transzendente) Gleichungen fUr diese beiden Grbilen T und T, bzw. T M . Die Berechnung dieser beiden Temperaturen aus den beiden stationiiren Bilanzgleichungen gestaltet sich besonders einfach, wenn man die logarithmierte Form der stationaen Stoffbilanz benutzt. Die Stabilitiit kbnnte man anhand der Kriterien beantworten, die in den meisten Lehrbuchern der Chemischen Reaktionstechnik angegeben sind. Da hier aber auch das instationiire Verhalten des Reaktors gefragt ist, erscheint es vorteilhaft, ein SIMULINK-Model1 zu erstellen und mit dessen Hilfe alle Fkagen zu beantworten, also auch die nach dem stationiiren Betriebspunkt. Ein solches Modell ist CSTR-INST.MDL; die Parameter sind im File CSTR-INST-DAT zusammengestellt. An der Stelle im Blockschaltbild, an der man einen Constant-Block mit dem Parameter T, erwarten wiirde, findet man einen Inport-Block in1 (mit Schatten unterlegt): In dieser Konfiguration kann man mit dem SIMULINK-Befehl trim den stationiiren Betriebspunkt berechnen; zunschst stellt man die Reihenfolge der Zustandsgrbaen (xstord) fest: cstr- inst -dat [sizes,xO,xstord]=cstr-inst(
sizes
[I ,I, [I ,0)
=
2
0
0 1 0 1 1
xo
=
298 1
xstord = 'cstr-inst/Integratorl' 'cstr-inst/Integrator' Dann lafit man die stationiiren Werte von T und T, Umsatz X suchen:
(fu)bei festgehaltenem
162 4 Ruhrkesselreaktoren [x,u,y,dx]=trim('cstr-inst',[298;0.6],300,
[],2)
x = 3.4951e+002 6.0000e-001 u = 3.2326e+002
Y = Empty matrix: dx = -6.2528e-013 -3.5527e-015
0-by-1
Die stationtire Temperatur ist also T = 349.51 K, und T, = 323.26 K; daraus folgt fiir die Manteltemperatur TM = 331.68 K. 1st der stationare Betriebspunkt stabil? Wir benutzen die Werte der Zustandsvariablen und des Eingangswertes aus dem vorigen Rechenschritt, um die Bilanzgleichungen am stationaren Betriebspunkt zu linearisieren: [A,B,C,D]=linmod('cstr-inst'.x,u) A =
4.5957e+000 -5.2499e+002 4.9118e-002 -4.0000e+000 B =
4.0000e+000 0
c = Empty matrix: 0-by-2 D = Empty matrix: 0-by-I +(A) ans =
2.9787e-001 +2.7047e+OOOi 2.9787e-001 -2.7047e+OOOi
Die Realteile der Eigenwerte der Systemmatrix sind positiv, also ist der Betriebspunkt instabil. Das X-T-Diagramm (Abb. 4.16) zeigt, daO das Steigungskriterium erfiillt ist (statische Stabilittit); nicht erfilllt ist das zweite Kriterium fur die dynamische Stabilitat. Wir ersetzen jetzt den Inport-Block durch einen Constant-Block mit dem Wert fur T, und simulieren das Anfahrverhalten. Wir sehen: Unabhangig vom Startpunkt laufen die Trajektorien in der Phasenebene in einen Grenzzyklus um den stationtiren Betriebspunkt ein. Besonders interessant ist es, den Start
4.4 Probleme und Losungen
163
Abbildung 4.16: Stabilitiitsdiagramm fUr den CSTR.
aus dem stationaren Betriebspunkt heraus online auf dem X-Y-Graph zu verfolgen, wenn man mit den von MATLAB berechneten Werten ohne Aufrundung rechnet: Eine Zeitlang passiert nichts Sichtbares, bis dann numerische Ungenauigkeiten sich bemerkbar machen und die Trajektorie sich schnell bis zum Grenzzyklus aufschaukelt .
4.4.14
Styrolpolymerisation im CSTR (***)
Der Ausgangspunkt dieser Aufgabe ist eine Arbeit aus dem Jahre 1965 [13], in dem das dynamische Verhalten von Poiymerisationsreaktoren modelliert und auf einem Analogrechner simuliert wurde. Gewiinscht ist ein Umsatz von 60 % in einem CSTR bei einer Manteltemperatur von 358 K. Die Masse-Polymerisation von Styrol kann durch eine Reaktion erster Ordnung beschrieben werden; folgende Daten sind gegeben: 0
Haufigkeitsfaktor k,
0
Aktivierungsenergie E = 21.3 kcal/mol
0
0
0
= 1.39e9min-'
Reaktionsenthalpie AH = -17.7 kcal/mol Zulauftemperatur To= 288K spezifische Warme cp = c: und p = 1.03e-03.
+ pT mit c:
= 0.088 kcal/kg/K
164 4 Riihrkesselreaktoren Groijen des Wiirmeaustausches mit dem Mantel sind zusammengefdt in der Gruppe q = (= 2.93e-03 als Standardwert). Dichte des Zulaufs und des Kesselinhalts sollen gleich sein, und die fur die spezifische Wtirme angegebene Beziehung sol1 fitr den Zulauf und fitr den Kesselinhalt gelten - beide Annahmen erscheinen zumindest fragwitrdig. Wie grof3 m d die Verweilzeit im stationtiren Zustand (Betriebspunkt) sein, welche Temperatur stellt sich im Kessel ein? 1st der Betriebspunkt stabil? Wenn nicht, wie reagiert er auf kleine St6rungen? Wie kbnnte man ihn stabilisieren? Wie wiirde er dann auf grbflere Storungen reagieren, z. B. auf einen Ausfall des Zulaufs? In welchen Bereichen von Kesseltemperatur und Verweilzeit ist instabiles Verhalten zu erwarten?
3
Losungsvorschlag
Werte und Annahmen legen folgende Formulierung der Bilanzen nahe: dX dt
X r
- = k (1 - X ) - -
(4.60)
wobei wie bisher
(4.62) ist. ($' ist gleich der reziproken Molmasse von Styrol.) Die beiden Bilanzgleichungen werden am besten in ein SIMULINK-Modell iibertragen (Abb. 4.17), das erlaubt, stationtire Zustiinde zu ermitteln und das dynamische Verhalten zu untersuchen. Bei Auswahl und Schaltung der Blbcke kann man sich an der Analogrechnerschaltung in [ 131 orientieren; allerdings konnen viele Rechenoperationen wesentlich vereinfacht werden, indem man die Fcn-Blbcke von SIMULINK verwendet. Man kann nun das SIMULINK-Model1 GERREKS bffnen und die erforderlichen Daten laden, die im File GERRENS-DAT enthalten sind. Dann verwendet man den trim-Befehl, um bei festgehaltenem Umsatz von 60 % die beiden noch ausstehenden stationtiren Werte fiir T und r zu erhalten; dafiir mui3 man den Constant-Block u (= T bzw. bei der SE 1 / ~durch ) einen Eingangsblock (Inport-Block) ersetzen. (Zuvor sollte man mit der Anweisung [sizes,xO,xstord]=gerrens(
[I, [],[I ,0)
die Reihenfolge der Zustandsvariablen erfragen!)
4.4 Problerne und Losungen
165
U Clock cpO+mue' Fcnl
1
..
b
Mux
b
XT To Workspace
1
Mux
q'(u-Tm)
FcnP scope
Abbildung 4.17: SIMULINK-ModeU CERRENS.
166 4 Rtihrkesselreaktoren
[x,u,y,dx]=trim('gerrens',[398;0.6],300,[],2) x = 4.0280e 002 6.0000e-001 u = 3.8981e+002
+
Y = Empty matrix: dx = -1.7430e-013 -1.2937e-015
0-by-I
Fur SE!!! [x,u,y,dx]=trim( 'gerrens',[398;0.6],1/400, [] ,2) x = 402.8021 0.6000 u = 0.0026
Y' Empty matrix: dx = 1.0e-013 * 0.8329 0.0029 1/u
0-by-1
ans =
389.8098
Unter den angegebenen Bedingungen mua man also fiir 60 % Umsatz eine Verweilzeit von 389.82 min einstellen - die zugehtjrige stationare Kesseltemperatur ist dann 402.80 K. 1st dieser Betriebspunkt stabil? Wir linearisieren die Bilanzgleichungen am stationlren Betriebspunkt und ermitteln die Eigenwerte der Systemmatrix: [A, B,C,D]=linmod('gerrens',~,~) A =
2.6025e-002 -1.3023e+000 1.0169e-004 -6.4134e-003
B = 6.6669e-004 3.9486e-006
C = Empty matrix:
0-by-2
D = Empty matrix: 0-by-1
4.4 Probleme und Lasungen
167
eig(A) ans =
2.1235e-002 -1.6233e-003
Da ein Eigenwert positiv ist, ist dieser stationare Betriebspunkt instabil. Ein ubliches Diagramm, das die S-fbrmige X-T-Kurve sowie die Wtirmeabfuhrgerade enthalt, zeigt aul3er diesem noch zwei weitere stationtire Bertiebspunkte - die Konstruktion sei dem Leser iiberlassen. Selbstverstandlich lassen sich diese beiden Betriebszusttinde auch mit dem trim-Befehl finden. Eine kleine Stbrung, z. B. ein Anwachsen der Manteltemperatur um 2 K, lafit den Kessel zunachst durchgehen; dann schwingt er sich langsam auf einen neuen Betriebspunkt ein, wie das folgende Phasendiagramm (Abb. 4.18) zeigt.
520
500Y c-4803
c.
2
408.s
0.7
0.8 Umsatz
0.9
I
Abbildung 4.18: Phasendiagramm fiir Styrolpolymerisation im CSTR.
Fur dieselben Einstellungen, die hier verwendet wurden, finden die Autoren der zitierten Arbeit auf dem Analogrechner ebenfalls ein Durchgehen des Reaktors, wenn auch nach etwas ltingerer Zeit, aber dann stellt sich der neue Betriebspunkt aperiodisch ein. Wie ein Reaktor in einem solchen instabilen Betriebspunkt auf Stbrungen reagiert, htingt sehr empfindlich von den Parameterwerten und von der Rechengenauigkeit ab. Abb. 4.19 zeigt das Ubergangsverhalten fur vier Manteltemperaturen: Das untere linke Teilbild (2,l) zeigt noch einmal den Ubergang bei 360 K Manteltemperatur; bei 359 K, also 1 K iiber dem Wert am stationtiren Betriebspunkt, geht der Kessel zwar zunachst durch, ftillt dann aber auf den unteren der drei mbglichen stationtiren Betriebspunkte ab (Teilbild (1,2)).
168 4 Rffhrkesselreaktoren
6 o5 0 1 1 4 I 3 0 00.5 0 ! 1
300
5501.
0.5
1 I
5001
4
/
Abbildung 4.19: T-X-Diagramme bei der Styrolpolymerisation. Start bei T=402.8 K, X=0.6. Bild (1,l):Tm=358 K, (1,2): 359 K, (2,l): 360 K, (2,2): 361 K.
Stabilisieren wiirde man den gewiinschten Betriebspunkt mit einem Umsatz von 60 % iiber eine Regelung, zweckmai3ig eine Regelung der Kesseltemperatur iiber die Manteltemperatur, die man durch Verstellung des Kiihlmitteldurchflusses manipulieren kann. Zum Anfahren wiirde man wahrscheinlich auch noch eine Beheizung des Mantels (mit Dampf) vorsehen. Die Optimierung einer solchen Regelung liei3e sich am SIMULINK-Model1 untersuchen; dafiir m m t e man das Modell GERRENS entsprechend erweitern. Wir verzichten hier auf eine vollstandige Modellierung der Manteltemperatur-Regelung und beschriinken uns darauf, einen Regler fiir die Manteltemperatur einzubauen, ohne auf Details einzugehen (Abb. 4.20). Allerdings wollen wir wenigstens ansatzweise beriicksichtigen, dai3 die Manteltemperatur nach oben und unten begrenzt ist und dai3 die Regeleingriffe nicht beliebig schnell sein konnen; dafiir sehen wir im Modell entsprechende Begrenzer vor (Saturation und Rate Limiter). Wir stellen den Regler als P-Regler ein und fahren den Reaktor an, indem wir ein Losungsmittel bei Zulauftemperatur vorlegen (X0=0.999 ...!) und dann den Styrol-Zulauf anschalten: Das Ergebnis ist in den beiden folgenden Abbildungen 4.21 und 4.22 zu sehen. Der Reaktor fahrt nach moderatem Einschwingen scheinbar Strich. Ein vergrofierter Ausschnitt zeigt Schwankungen in den beiden Temperaturen, die so gering im Realfall natiirlich nicht ausfallen wiirden. Wir konnten das Modell erheblich erweitern, z. B. Storungen einfiihren, MeDfiihler realistisch simulieren usw. - das sollten wir MSR-Spezialisten iiberlassen. Auch die Art des Anfahrens erscheint zwar regeltechnisch einfach, ist aber wegen des Losungsmitteleinsatzes
4.4 Probleme und Ldsungen
-
169
kW'exp(-Ed Wu)
cpO+rnue'u
q'(~(l)-~(2))
MUX
+
regler
Tm
Abbildung 4.20: GERRENS-PID.
f300 a,
500
1000
s20(?!l 500
1000
'20%
1500
2000
2500
3000
1500
2000
2500
3d00
Y
c
a,
E 300 (d
Zeit, min
Abbildung 4.21: Styrolpolymerisation im CSTR - Anfahren und Regeln.
170 4 Riihrkesselreaktoren
402.805 402.8 402.795 402.79
i1660
Y
$
358
$2 357.9 5 357.8 0)
4-
2
1670
1680
1690
rzrl
1650
1660
1670 1680 Zeit, min
1690
Abbildung 4.22: Styrolpolymerisation im CSTR. VergroBerter Ausschnitt des Regelverhaltens. vermutlich nicht die wirtschaftlichste. Auf jeden Fall dilrfen wir aber annehmen, dai3 der instabile Betriebspunkt durch eine Regelung stabilisiert werden kann. Was wurde passieren, wenn im eingeregelten Zustand plotzlich der Zulauf ausfiele? Um diese Rage zu studieren, konnen wir einen Simulationslauf anhalten (mit Pause im Menil Simulation), die Verweilzeit auf einen sehr hohen Wert setzen und mit Continue fortfahren. Wir sehen (Abb. 4.23), daO eine schnelle Regelung mit diesem Problem fertig werden kann, ohne daB der Reaktor ubermaig hohe Temperaturen erreicht. Um das fur die Praxis zu garantieren, milDten wir das Model1 aber noch wesentlich realistischer gestalten, wie es schon angedeutet wurde. Sie kbnnten z. B. ausprobieren, bis zu welchen Werten man den Rate Limiter verstellen kann, bevor der Reaktor bei Ausfall des Zulaufs durchgeht - wie langsam also die Regelung in etwa sein darf! Konnten wir die Vorgaben etwas andern und einen stabilen Betriebspunkt wahlen? Um diese letzte Rage der Aufgabe zu beantworten, stecken wir das Gebiet der instabilen Betriebszustgnde ab, indem wir die beiden einschliigigen Stabilitatskriterien benutzen; sie lauten in der hier passenden Form, die wir aus dem zugrundegelegten Artikel ubernehmen konnen:
(4.63)
(4.64)
4.4 Probleme und Ldsungen
406
404
171
1 ~
0.5; 100 I
1000
2000
3000
4000
5000
6000
1000
2000
3000
4000
5000
6000 I
1000
2000
3000
4000
5000
6000
I
I
-100
Zeit, min
Abbildung 4 . 2 3 : Styrolreaktor bei Ausfall des Zulaufs. Oberes Bild: Kesseltemperatur, mittl. Bild: Umsatz, unteres Bild: Manteltemperatur (Abweichung vom stationtiren Zustmd). Wenn wir ein naives MATLAB-Programm die Werte suchen lassen, die diese Ungleichungen erfilllen, stofien wir auf die Schwierigkeit nicht eindeutiger Losungen (GERRENS-s mit GERRENS-FUN): Offensichtlich findet das Programm manchmal den unteren Zweig, manchmal den oberen (Abb. 4.24). Am einfachsten - wenn auch nicht besonders elegant helfen wir uns, indem wir aus diesem ersten Ergebnis Bereiche abschtitzen, von denen man entweder im oberen oder im unteren Zweig landen diirfte. Im Prcgrammausdruck sind diese beiden Bereiche ,,wegkommentiert". Wenn wir die beiden Zeilen nacheinander zur aktuellen Zeile machen, erhalten wir das gewiinschte Ergebnis; ebenso verfahren wir beim 2. Kriterium (GERRENS-S2 und GERRENS- FUN2): GERRENS -S
Tv=[];taw=[];fv=[] ; for t a u = 100:10:1000 tauv=[tauv,tau]; T=fmin('gerrens fun',273,573); %T=fmin( 'gerren<-fun',273,400); %T=fmin( 'gerrens_fun',382,573); Tv=[Tv,T]; f=gerrens-fun(T); fv=[fv,f]; end
172 4 Rithrkesselreaktoren
4601 440 Y
380L 3600
200
400
600
1 00
800
tau, min
Abbildung 4.24: Styrolpolymerisation im CSTR. Stabilitatsgrenze nach 1. Kriterium. (In unregelmaaiger Folge werden Losungen im oberen oder unteren Zweig gefunden; s. Text.)
480, 460-
I
\,
Y
~ 4403 E g420-
- - _ _-
c
- - - _ _- - -
- - _-
E
? 400380-
~
\
- - - - - - _- - - - - -
Abbildung 4.25: Styrolpolymerisation im CSTR 1. Kriterium, - - - - 2. Kriterium.
~
- _ _ - - - _ - _ - - - -
-
Stabilitatsgrenzen.
4.4 Probleme und Lasungen GERRENS-FUN function f=gerrens-fun(T) global ndelh kOO EdR q cp0 mue tau ktau= kOO*exp(-EdR/T)*tau; cp=cpO+rnue*T; f=( (I+tau*q/cp)*( l+ktau) 2/ktau*TA2/EdR-ndelh/cp)
A
173
2;
Der gewilnschte Betriebspunkt mit 60 % Umsatz (T = 403 K und T = 398 min) liegt also mitten im instabilen Bereich (Abb. 4.25). Kbnnte man einen stabilen Betriebspunkt wahlen, so dai3 die Last nicht ausschliefllich auf einer Regelung liegt? Bei niedrigen Temperaturen, unter ca. 100 "C, d r d e man fiir einen akzeptablen Umsatz unwirtschaftlich hohe Verweilzeiten benbtigen; bei hohen Temperaturen und akzeptablen Verweilzeiten ware der Umsatz nahe bei 100 %, wegen der hohen Viskositat aber technisch schwer zu beherrschen.
Einstellen der Zustrome in einem konzentrationsgeregelten Different ial-Kreislaufreaktor (* *)
4.4.15
Die Methanisierung von Synthesegas SOU in einem konzentrationsgeregelten Kreislaufreaktor mit CSTR-Verhalten kinetisch untersucht werden. Stbchiometrisch lMt sich das Reaktionssystem durch zwei Gleichungen beschreiben: CO 3H2 = CH4 H2O und CO H20 = C02 H2. Aus Voruntersuchungen ohne Konzentrationsregelung ist eine formale Massenwirkungskinetik r = r(x;k) erstellt worden; mit ihrer Hilfe sol1 filr die ersten konzentrationgeregelten Versuche berechnet werden, welche Zustrtime der einzelnen Komponenten einschliefllich eines Inertgases (N2) beim Anfahren des Reaktors einzustellen sind, um vorgegebene Konzentrationen im Kreislauf zu erhalten. (Wegen der noch unsicheren Kinetik kbnnen diese Zulaufwerte nur Schatzwerte sein; filr die endgtiltigen Einstellungen milssen die Regler sorgen - das ist das Prinzip des konzentrationsgeregelten Kreislaufreaktors.) Die gewilnschten Molanteile sind: 1 % CO, 18 % H2, 3 % H20, 10 % CH4 und 2 % COz, der Rest N2 Bei der vorgesehenen Temperatur sind die Geschwindigkeitskonstanten der Massenwirkungskinetik: kl = 5 * in konsistenten Einheiten, k2 = 5 * die erste Reaktion ist praktisch irreversibel, die Gleichgewichtskonstante der zweiten ist Kz,2 = 11.7. Die kleinsten an den regelbaren Durchfluhentilen einstellbaren Gasstrtime sind 6*10-7 in konsistenten Einheiten.
+
+
+
+
Losungsvorschlag
Der Schlussel zur Berechnung der passenden Zustrtime ist die Uberlegung, da5 der Gesamtzustrom zu einem Kreislaufreaktor mtiglichst klein sein sollte, um ein mtiglichst groiks Kreislaufverhtiltnis und damit das gewtinschte CSTR-Verhalten zu erreichen. Die Aufgabe filhrt also auf ein Optimalproblem:
174 4 Riihrkesselreaktoren
6
C f:
= Man
(4.65)
i=l
mit den stationaren Bilanzgleichungen des Kreislaufreaktors als Nebenbedingungen:
f x - fo = NR r m
(4.66)
Dabei ist x der Vektor der Molanteile, fo der Vektor der Zustrbme, NR die stbchiometrische Matrix und r der Vektor der Reaktionsgeschwindigkeiten;fiir f , den Gesamtstrom am Ausgang, gilt:
f = fO+&
(4.67)
wobei
(4.68) i=l
Als weitere Nebenbedingungen mtissen die Zustrbme grbfier oder gleich den unteren Grenzen der Ventil-Durchflusse sein. Da alle Beziehungen bezuglich der Zustrbme linear sind, liegt ein Problem der linearen Programmierung vor, das mit dem Programm lp aus der Optimization Toolbox gelbst werden kann. CCRR-CREUM
NR=[-1 -1;-3 1;l -1;l 0; 0 11; s=su rn( N R) ;
xsoll(l)=0.01; %CO XSOII( 2)=. 18; %H2 XSOII (3)=.032; %H20 ~~0ll(4)=0.1; %CH4 ~~011(5)=.016;%C02 xsoll(6)=l-sum(xsoll(l:5)); %N2 k( 1)=5.e-3; k(2)=5.e-4; ek( 2)= 11.7;
m=l; r( l)=k( l)*rn*xsoll( l)*xsoll(2) 3; r( 2)= k(2)*rn*(xsoll( l)*xsoll(3)-xsoll(5)*xsoll(2)/e k(2)); %Die Nebenbedingungen miissen fiir lp in die Form A x = b gebracht werden: A=[-eye(5) ,xsoll(1:5)'/xsoIl(6)]; A
4.4 Probleme und Losungen
175
%Hier wurde von der Beziehung f 26 = fl Gebrauch gemacht. b=NR*r’; %Der Aufruf von lp ergibt die optimalen Zustrbme (fop): f o p 4 p(ones( 1,6) ,A,b,ones(6,1)*6e-07,[I, [],5); Wer die Optimization Toolbox nicht hat, kann das Problem sehr einfach auf weniger formalem Wege h e n : Man setzt in die stationsren Bilanzgleichungen fiir die Zustrbme die unteren Grenzen ein und ermittelt den grbflten Abstrom; dieser Wert, in die Bilanzgleichungen eingesetzt, ergibt die gesuchten optimalen Zustrbme. Der folgende Ausdruck dilrfte selbsterklarend sein:
CCRR-FO %CO H2 H20 CH4 C02 N2 ccrrdat NR=[-l -1;-3 1;l -1;l 0;O 1;O 01; g=[ones(6,1)*6e-O7]; NRr=NR*r’; , fmax=max( (NRr+g)./xsoll’); fO=fmax*xsoll’-NRr;
4.4.16
SIMULINK-Model1 einer Destillationskolonne anhand der MESH-Gleichungen (***, nicht SE)
Diese Aufgabe f d t auf einer Studienarbeit und einem internen Bericht aus dem Institut fur Systemdynamik und Regelungstechnik der Universitat Stuttgart, die mir sein Leiter, Herr Prof. Dr.-Ing. Dr. h.c. mult. E.D. Gilles, freundlicherweise zur Verfiigung gestellt hat: M. Klander, Dynamische Simulation verfahrenstechnischer Prozesse - Ein Vergleich zwischen den Simulationsumgebungen SIMULINK und ACSL; A. Wahl, M. Klander, F. Allgbwer, Realisierung einer Process Model Toolboz in den Simulationsumgebungen ACSL und SIMULINK. Das Modell sol1 folgenden Anforderungen geniigen: beliebige Anzahl von Bbden, auch mit Zulauf oder Seitenabzog, beliebige Anzahl von Komponenten, detaillierte Berechnung nach den MESH-Gleichungen. Die Beschtiftigung mit einer solchen Aufgabe aus dem Bereich der physikalischen Grundverfahren erscheint im Rahmen der Reaktionstechnik sinnvoll, weil damit wesentliche Grundlagen zur Modellierung von Reaktionskolonnen erarbeitet werden; ein solches Modell sollte dann problemlos um Reaktionsterme erweitert werden kbnnen - zumindest bei Reaktionen in homogener Phase. Die vollstsndige Lbsung dieser Aufgabe diirfte Stunden, vermutlich sogar Tage in Anspruch nehmen - aber Sie werden sehr vie1 dabei lernen. Sollte Ihnen der Aufwand jedoch zu hoch sein, kbnnen Sie auch das fertige Modell verwenden und sich auf die folgenden kleineren Teilaufgaben beschrsnken, die zum Teil allerdings eine intensive Beschaftigung mit dem vorliegenden Entwurf verlangen:
176 4 Ruhrkesselreaktoren a) Das Modell soll benutzt werden, um die Destillation eines Methanol/nPropanol-Gemisches in einer Kolonne von 40 Bbden zu simulieren. Die Vorgaben sind: Zulauf auf dem 21. Boden (von oben; Kondensator und Verdamp fer zahlen nicht zu den Bbden) mit xzu = 0.32, Lzu = 0.6e-04 kmol/s und Tzu = 340 K, Verdampfungsrate VVerd = 0.568e-04 kmol/s, Holdup auf allen Bbden HBoden = 1.7e-04 kmol, ebenso im Kondensator HKond = 1.7e-04 kmol, im Verdampfer HVerd = 8.5e-04 kmol, Druck p = le5 Pa. Diese und andere Variablen und Daten ftir das vorliegende Modell sind in dem File DEST2-DAT zusammengestellt. b) Der Blasenabzug soll bei der Teilaufgabe a) folgende Trajektorie durchlaufen: 30 Minuten Standardwert (0.35e-04 kmol/s) bei einem KonzentrationsStartprofil von xi,Methanol = 1 far alle i, fiinfminiitige rampenformige Erhohung des Blasenabzugs um 60 '?6 pro Stunde, Konstanthalten auf dem Endwert fiir 30 Minuten, sprungfbrmiges Zuriicksetzen auf den Standardwert und Konstanthalten fiir weitere 90 Minuten. c) Wie kbnnte man dem vorliegenden Modell ein vorgegebenes Druckpre fil aufzwingen, um den Druckabfall zu beriicksichtigen? Wie ein vorgegebenes Anfangs-Konzentrationsprofil ( q , j )? d ) Das Subsystem ,,Ausgang" , das die Ausgabegrbaen zusammenstellt, stammt in den Grundziigen noch aus der Zeit von MATLAB 4x bzw. SIMULINK lx. Mit den neuen Mbglichkeiten von SIMULINK 2 bzw. 3 laat es sich etwas einfacher gestalten. Versuchen Sie es! e) Implementieren Sie die nichtlineare Gleichgewichtsbeziehung als algebraische Gleichung! Vergleichen Sie die Rechenzeiten fiir verschiedenen Werte des Blasenabzugs mit denen beim vorliegenden Entwurf. Folgende Vereinbarungen sollen gelten: 0
Es herrscht Gleichgewicht zwischen Dampf- und Fliissigphase. Der Bodenwirkungsgrad ist gleich eins.
0
Die Menge der Dampfphase wird vernachlasigt. Der Hold-up auf den Bbden ist zeitlich konstant.
0
0
0
0
Die Temperaturen auf den einzelnen Biiden entsprechen den Siedetemperaturen. Die Mischungen sind ideal. (Diese Vereinfachung wird nicht generell getroffen.) Der Druck in der Kolonne ist konstant. Der Druckabfall auf den Biiden wird vernachlasigt. (Diese Vereinfachung wird nicht generell getroffen.)
0
Hydrodynamische Effekte werden vernachl8ssigt.
0
Die Kolonne hat nur einen Zulauf und keinen Seitenabzug.
4.4 Probleme und L6sungen
177
LSsungsvorschlag Es bieten sich verschiedene Mbglichkeiten an, das gewunschte Modell zu entwickeln, z. B.: 0
0
0
Modellierung der gesamten Kolonne Modellierung einzelner Bausteine wie Boden, Zulaufboden, Verdampfer usw. Modellierung (iiberwiegend) mit S-Funktionen - in der MATLAB-Sprache
C als compiliertes M-File
- in -
0
Modellierung (Uberwiegend) mit Blbcken aus der SIMULINK-Bibliothek.
Einige Uberlegungen zur Auswahl aus diesen Mbglichkeiten: Das Modell diirfte flexibler sein, wenn es aus einzelnen Bausteinen besteht. S-finktionen in der MATLAB-Sprache arbeiten sehr wahrscheinlich zu langsam. Programmierung in C fiihrt zu kurzen Rechenzeiten, widerspricht aber im Grunde der MATLAB-Intention, sich nicht mit dem Programmieren in ,,Low-level-Sprachen" aufzuhalten. Ein compiliertes M-File als S-Funktion erfordert penibles Buchhalten, da alle GroBen als Eingangsvektor iibergeben werden mussen, der dann entsprechend zerlegt werden mua; in der jetzigen Version erlaubt der Compiler nicht einmal die Ubergabe von Parametern auf anderem Weg. Der Aufbau eines Blockmodells wtire einfacher, wenn es auf die spezielle Aufgabe zugeschnitten sein diirfte, denn dann kbnnte man umfangreichere Gleichungen in Fcn-Blbcken unterbringen; die vektorisierte Form, die die allgemeine Aufgabe verlangt, ist etwas umstgndlicher zu implementieren. Keine der angefiihrten Lbsungsmbglichkeiten drgngt sich eindeutig a d . Wenn man die Einstellung akzeptiert, (18ngere) Programme nicht in C zu schreiben, dann diirfte die Blockmodellierung einzelner Bausteine die beste Wahl sein. Zungchst wird man sich die MESH-Gleichungen zusammenstellen: M-Gleichungen (Massenbilanzen) fur einen Boden ohne Zulauf und Seitenabzug: dxij -
- l / n * ~ (Li-lxi--l,j dt
- Lixi,j
+ K+lYi+l,j - KYi,j)
(4.69)
Der Index i zahlt die Bbden (von oben nach unten), j die Komponenten; ist der molare Hold-up. Bei einem Boden mit fliissigem Zulauf ist zum Klammerausdruck der Term Lzux,,,j zu addieren. EGleichungen (Equilibrium-Beziehungen);
nH
(4.70)
178 4 Rlthrkesselreaktoren Bei einer idealen Mischung gilt
(4.71)
Fur den Dampfdruck der reinen Komponente konnen wir z. B. die AntoineBeziehung benutzen:
p i , j = exp(Aj -
4 ~
)
Cj +Ti
(4.72)
pi ist nach Vereinbarung gleich dem konstanten Druck p . S-Gleichungen (Molanteil-Summierungen): nc
(4.73) j=1
nc
C"i,j
=
1
(4.74)
j=1
H-Gleichungen (Enthalpie-Bilanzen) filr einen Boden ohne Zulauf und Seitenabzug:
dHi - 1 / n H ( L ~ - I H ~ -LiH: ~ dt
--
+ V,+lHy+, - V,H:)
(4.75)
Der obere Index 1 bezeichnet die Flilssigphase (liquid), 21 die Dampfphase (vapour). Bei einem Boden mit flilssigem Zulauf ist zum Klammerausdruck der Term L,,Hf, zu addieren. Eine der Summationsbeziehungen kann durch eine Gesamtmengenbilanz ersetzt werden, die man aus der Teilmengenbilanz durch Summierung iiber den Index j erhiilt:
Allgemein ist
(4.77) (4.78) (4.79) Wenn wir diese drei Grdflen und Gleichungen nicht mitziihlen, ist jeder Boden definiert durch 2 n c 3 Gleichungen, eine Kolonne mit nB Boden und
+
4.4 Problerne und Losungen
179
definiertem Zulauf also durch ein DAG1-System von n ~ ( 2 n+ c 3) Gleichungen Li, K und Ti. Allerdings ist der Index dieses DAG1-Systems mindestens zwei. Das ist schon fiir einen der verbreiteten DAG1-Loser ein nicht zu unterschtitzendes Problem, umso mehr fiir SIMULINK, das ja keinen solchen Lbser eingebaut hat. Bei anderen Gelegenheiten haben wir DAG1-Systeme vom Index eins in DG1-Systeme umgewandelt, indem wir das tot ale Differential der algebraischen Gleichungen gebildet und so DGls far die algebraischen Variablen gewonnen haben. Bei einem Index-2System m W e n wir das totale Differential erst algebraisch manipulieren, um dann erneut ein totales Differential bilden zu kbnnen - ein miihseliges Geschaft. Im vorliegenden Fall m a t e n wir zunachst das totale Differential der Summationsbeziehung Cyi,j - 1 = 0 bilden, wobei wir y,,j durch Ki3jxi,j mit KiSjnach den angegebenen Ausdrikken ersetzen wiirden:
+
fiir die n ~ ( 2 n c 3) Unbekannten x,,j, y,,j,
(4.80)
In dem totalen Differential dieser Gleichungen m W e n wir die Differentialquotienten von x und T nach t durch die rechten Seiten der beiden DGls unseres DAG1-Systems ersetzen (nach entsprechender Umformung der Enthalpiebilanz auf T ) ; erst dann erhielten wir algebraische Gleichungen, in denen die Variablen Li und V , auftauchen. Wenn das so entstehende neue DAG1-System vom Index eins wsre, konnten wir zur konventionellen Behandlung iibergehen. In MATLAB wiirde das nach unserem bisherigen Vorgehen - wie schon gesagt bedeuten, noch einmal totale Differentiale fiir die neuen AGls zu bilden. Sehen wir uns nach einem einfacheren Weg um! Wir kbnnten beschlie5en, uns nur fur die stationtiren Lbsungen zu interessieren. Das ist aber kein empfehlenswerter Ausweg, da wir es dann mit einem nichtlinearen AGI-System mit n ~ ( 2 n c 3) Gleichungen zu tun bekommen. Dafilr gibt es zwar spezielle L6sungsstrategien wie den Naphtali-SandholmAlgorithmus, aber wir verlbren den Vorteil, den uns die neuen Losungsmethoden filr DAGls bieten. Versuchen wir also lieber, die DAG1-Struktur beizubehalten, sie aber weiter zu vereinfachen. Wir haben schon einige Vereinfachungen in unsere Gleichungen eingebaut , z. B. was die Grbf3e K angeht, und kbnnen noch weiter vereinfachen, indem wir z. B. die Abhangigkeit der Enthalpien vom Druck vernachliissigen. Ausserdem konnten wir die Anzahl der Gleichungen und Unbekannten reduzieren, indem wir z. B. yi,, durch Ki,jx,,j ersetzen. Der entscheidende Schritt aber besteht darin, die Temperaturtlnderung auf den Bbden zu vernachlusigen: Er macht aus dem Index-2- ein Index-1-System! Diese Vernachlassigung ist allerdings eine grobe Vereinfachung, die insbesondere bei grbaeren Hold-ups fragwiirdig ist. Wir konnen uns aber mit dem Gedanken beruhigen, die stationaren Lbsungen richtig zu erhalten, und das obergangsverhalten in mehr oder weniger guter NBherung - das scheint ein tragbarer Kompromif3 zu sein. Lbsen wir also in der Enthalpiebilanz auf in
+
180 4 Riihrkesselreaktoren
und vernachliissigen die ersten drei Terme, die beiden ersten nach unseren Voraussetzungen zu Recht und den dritten mit den erbrterten Vorbehalten; es bleibt iibrig:
(4.82) und wegen
j=l
j=1
dHi dt =
nc-1
1(Hi.j
dxi,j
(4.84)
- Hi,nc)- dt
j=1
Damit erhalten wir als Enthalpiebilanz die algebraische Gleichung nc-1
V,H:)
-
C
(Hi.j -
j=1
(4.85) Sie ist linear in den indizierten Variablen L und V , wie man sich leicht durch einen Blick auf die M-Bilanz iiberzeugt. Eine zweite lineare Beziehung fitr diese GrbBen ist die Gesamtmengenbilanz. Wir kbnnen also einen Boden beschreiben durch nc - 1 DGls, den M-Bilanzen, fiir nc - 1 Molanteile x i , j , die beiden gerade e r w h t e n linearen Gleichungen, sowie die nichtlineare Gleichgewichtsbeziehung (4.80), eine Bestimmungsgleichung filr Ti, deren Terme gleichzeitig die yi,j-Werte liefern; die Summationsbeziehung fiir die x i , j ergibt schlieBlich den Molanteil Die zwei linearen Gleichungen fiir jeden Boden liefern die L i und K , wenn man entweder LO und Vno+l (also Riicklauf vom Kondensator und Verdampfungsrate aus dem Sumpf) vorgibt oder noch die Gesamtmengenbilanzen filr Kondensator und Sunipf (s. weiter unten) hinzunimmt und zwei unabhangige Grbfien vorgibt. Einen externen DAG1-L6ser k6nnen wir dieses Gleichungssystem losen lassen. In MATLAB bzw. SIMULINK ilberfithren wir zweckmtdig die nichtlineare Gleichung in eine DG1 filr T i , wie in den bisher b e handelten Fallen ilber das totale Differential; die Gleichung ist so einfach, daB wir zum Differenzieren nicht einmal die symbolische Toolbox b e m ~ e milssen; n wir erhalten
181
4.4 Probleme und Losungen
dTi
(4.86)
Die beiden linearen Gleichungen f t h Li und K kbnnen wir ohne Rechenzeitprobleme bei jedem Schritt des DG1-Lbsers lbsen - die Rage ist allerdings: wie? Wie wir es auch anstellen, wir kommen nicht ohne einige fehlertrachtige algebraische Manipulationen aus und sollten die symbolische Toolbox benutzen, etwa wie folgt (der Vergleich mit den Modellgleichungen l&t wohl die Namen eindeutig zuordnen): syms L i m l hliml Li hi V i p l hvipl H x i m l y i p l Vi xi yi hli hLi hLinc dxidt= ' ( 1/ H*( Liml * x i rn1-Li*xi +Vi p l * yi pl-Vi* yi ) )' ; enth='( Liml*hliml-Li*hli+Vipl*hvipl-Vi*hvi-H*dxidt*( hLi-hLinc))'; Vi='( Liml-Li+Vipl)'; c2=subs( enth,'dxidt',dxidt)
c2 = (Liml*hliml-Li*hli+Vipl*hvipl-Vi*hvi-H*(l/H*(Liml*ximl...Li*xi+Vipl*yipl-Vi*yi))*(hLi-hLinc))
...
Hier konnte man nach Liml und Vi zusammenfassen und aus den zugehb rigen Koeffizienten - zusammen mit der Gesamtstrombilanz - die Matrix fUr die zwei Gleichungen mit zwei Unbekannten sowie den Vektor der rechten Seite bilden. Dieses Gleichungssystem kbnnte mit Hilfe einer C MEX-file 5'-finction gelost werden (schliefllich sollten wir das Prinzip, nicht in ,,Low-level-Sprachen'' zu programmieren, nicht zu Tode reiten!). Der Aufwand fur die Implementierung ware aber kaum geringer als bei der folgenden Substitution, die bei zwei Gleichungen schnell durchzufuhren ist - besonders mit Hilfe der symbolischen Toolbox: c3=subs(c2,'Vi',Vi) c4=collect( c3,Liml) c5=collect(c4, Li) c6=collect(c5,Vipl) Lim lsol=solve( c6, Liml) Lim lsol=collect (Limlso1,Vipl) Lim Isol=collect( Limlsol, Li) pretty( Lim lsol) (-hvi + hli - xi hLi + xi hLinc + yi hLi
yi hlinc) Li
hliml - hvi - ximl hLi + ximl hLinc + yi hLi - yi U i n c (yip1 hLi - yipl hLinc - hvipl + hvi - yi hLi + yi hLinc) Vipl hliml - hvi - ximl U i + ximl hLinc + yi hLi - yi hLinc
182 4 Rffhrkesselreaktoren Das also ist der Ausdruck fiir L,-l, der ubersichtlich genug sein durfte, um ihn noch per Hand etwas weiter zu vereinfachen. Warum berechnen wir Li-1 (und und nicht Li? Nun, das wtire sehr ungeschickt, denn dann kbnnten wir nicht nacheinander auf jedem Boden das lineare Gleichungssystem aus nur zwei Gleichungen losen, sondern miiBten die Gleichungen fur L, und vi filr die gesamte Kolonne auf einmal lbsen, also ein Gleichungssystem aus 2 n Gleichungen ~ simultan. Dafilr dilrfen wir allerdings nicht je eine Grbfle im Verdampfer (Blase) und im Kondensator vorgeben, sondern mussen zwei Grbflen an einem Ende der Kolonne wtihlen, also nicht wie hiiufig anzutreffen die Verdampfungsrate und den Riicklauf, sondern z. B. Verdampfungsrate und Blasenablauf, was aber kaum einen Nachteil bedeutet. (Wir kbnnten auch L, und vi+l berechnen, Rilcklauf und Destillatabzug vorgeben - und damit das Rticklaufverhaltnis - und dann die Kolonne von oben nach unten durchrechnen.) Die Gleichungen fur Verdampfer und Kondensator milssen wir noch ergtinzend zu unserem Model1 hinzufilgen: Verdampfer (Blase):
x)
(Totaler) Kondensator:
(4.88) Durch Summieren tiber den Index j kann man zusammen mit den S-Gleichungen die Gesamtmengenbilanzen erhalten:
-Lo
+ v, - D = 0
(4.90)
( B ist der Blasenabzug, D der Destillatabzug, nng die Anzahl der Boden.) Wir kbnnen jetzt darangehen, das SIMULINK-Modell aufzubauen. Ein Entwurf ist in der folgenden Abbildung 4.26 zu sehen. Er enthtilt vier Subsysteme: zur Berechnung der Temperatur und der Dampfphasenzusammensetzung (T und y), zur Berechnung der Enthalpien fiir Dampf- und Fltissigphase (hv und hl) sowie der Enthalpien der einzelnen Komponenten in den beiden Phasen (die Vektoren hL und hV), zur Berechnung der Strome Li-1 und Vi sowie ein weiteres Subsystem ,,Ausgang", in dem die austretenden Grbflen zusammengestellt werden. Die Enthalpien werden berechnet aus den Standard-Bildungsenthalpien der Fliissigphasekomponenten und ihrer Cp-Werte in Form von Polynomen; Addieren der Verdampfungsenthalpien aus der Lee-Kesler-Beziehung ergibt die
4.4 Probleme und LSsungen
183
Abbildung 4.26: SIMULINK-Model1 eines Destillationskolonnen-Bodens.
Enthalpien der Gasphasekomponenten. Alle bendtigten Werte werden wie in diesem Buch ilblich in M-Files zusammengestellt. Aus einem Bodenblock l&5tsich nun durch Kopieren eine Kolonne aufbauen. Das geht besonders schnell und bequem, wenn wir eine kleine Unvollkommenheit von SIMULINK tiberlisten: Die Eingangs- und Ausgangs-Verkntipfungsstellen der SIMULINK-Subsysteme lassen sich leider nicht beliebig anordnen, und die vorgegebene Anordnung - Eingangsstellen auf der einen, Ausgangsstellen auf der gegenuberliegenden Seite - sind zum Verschalten einer Gegenstromkolonne nicht besonders gut geeignet. Filgen wir also ein zweites Subsystem hinzu, so wie es die Blocke in der Privat-Bibliothek (PRIVAT-BIBLIO) im Subsystem ,,Destille" zeigen, und auch gleich die erforderlichen Verbindungsleitungen, und wir erhalten im Prinzip das Bild einer theoretischen Stufe. Zum Kopieren oder Verschieben miissen wir daran denken, das gesamte Aggregat zu selektieren. Um eine Kolonne von 40 Bdden aufzubauen, wie es die Teilaufgabe a) verlangt, bilden wir z. B. durch Kopieren und Zusammenfilgen nacheinander 1, 2, 4, 8 miteinander verbundene Bdden und Kopieren diese Zeile noch viermal; dann verbinden wir die Zeilen, ersetzen den 21. Boden durch einen Zulaufboden aus der Privat-Bibliothek (PRIVAT-BIBLIO), filgen Kondensator und Verdampfer hinzu, und die Kolonne ist fertig. An Stellen, die uns interessant erscheinen, k6nnen wir Ausgabe-Bldcke anschlieaen ( To Workspace, Display usw.). (Ab dem Kopieren der zweiten Zeile zur dritten trat ein merkwilrdiger Fehler auf: Die Reihenfolge der Nummerierung der Bdden war unterbrochen. Genau so merkwtirdig ist, daf3
184 4 Rtihrkesselreaktoren dieser Fehler nicht auftrat, wenn man nicht die zweite, sondern die erste Zeile - 40BOEDEN). Auf jeden Fall sollte in die dritte kopierte (Model1 DEST-DT man die Nummerierung kontrollieren, denn eine aufsteigende Reihenfolge kann wichtig sein, wenn man die Blbcke iiber ein Programm ansprechen mbchte.) Es bietet sich an, die Blbcke fur Boden, Zulaufboden, Kondensator und Verdampfer in eine Bibliothek zu stellen, wie es hier geschehen ist. Wenn Sie einen solchen Bibliotheksblock in ein Modell kopieren, bleibt die Kopie mit ihm verbunden und macht alle sptiteren Vertinderungen mit; sie selbst ist aber nicht vertinderbar. Man kann die Verbindung lbsen durch den Befehl Break Library Link aus dem Edit-Menu. Daran sollten Sie denken, wenn Sie die Destillationsblbcke zu einer Kolonne kopieren, in der Sie spater spezifische h d e r u n g e n vornehmen wollen, z. B. mit set-param (s. a. Teilaufgabe c)). Wir kbnnen nun einen Simulationslauf starten mit den Einstellungen im File DEST2-DAT. Als Anfangswert ftir die Molanteile ist hier reines Methanol gewahlt; die konsistente Anfangstemperatur besorgt ein kleines Hilfsprogramm, das SIMULINK-Model1 DEST-TYH. Man startet die Simulation entweder vom Menti Simulation im SIMULINK-Fenster oder im MATLAB-Fenster, in dem die CPU-Zeit ausgegeben werden kann. Als DG1-Ltjser wird odel5s benutzt; nach einigem Probieren erweisen sich die im folgenden angegebenen Fehlertoleranzen als ausreichend. options=si m e t ( ' RelTol' ,le-05, 'AbsTol' ,le-08); tic;sirn('dest-dT -40Boeden',15000,options);toc elapsed-time = 4.7547e+001 Man kann die Modellsimulation benutzen, um die Bedingungen fiir eine bessere Auftrennung, insbesondere fiir ein reineres Kopfprodukt abzustecken; das sei dem Leser tiberlassen. Aus der folgenden Teilaufgabe b) bekommt man einen Hinweis, wie sich z. B. die Anderung des Blasenabzugs auswirkt. Die Rechenzeiten nehmen betrachtlich zu, wenn man sich im Bereich von etwa 99 bis 100 % Methanol im Kopfprodukt bewegt. Fiir die Teilaufgabe b) ersetzen wir den Constant-Block ,,LVerd" im Verdampfer durch ein Subsystem ,,Blase (LVerd) " (in DEST-VERDAMPFER-TRAJEKTORIE), das die gewiinschte Trajektorie bereitstellt. Hinter dem Enabled Subsystem verbirgt sich ein Fcn-Block mit dem Ausdruck ,,LVerd*(1+0.6/3600*(~-1800))". Ein Simulationslauf, vom MATLABFenster aus gestartet, ergibt als Rechenzeit elapsed-time = 6.6593e+001
(Die Integrationszeit betragt hier 15000 statt der geforderten 9300 Sekunden; da im stationtiren Zustand kaum Rechenzeit verbraucht wird, spielt das keine Rolle.) Der Verlauf des Molanteils von Methanol im Kondensator ist in der Abb. 4.28 zu sehen.
4.4 Probleme und Ltlsungen
185
n
+
In1
Out1
Clock3
I
r------
+ Sum2 Switch
Clock2 LVerd
Constant3
Abbildung 4.27: Blase (LVerd)
Abbildung 4.28: Verlauf des Molanteils von Methanol beim Simulationslauf mit Blasenabzugs-Trajektorie.
186 4 Riihrkesselreaktoren Bemerkenswert ist die geringe Rechenzeit. Bei einer Implementation in der Arbeit von Ratzdorf et al. [14], in der nur die Summationsbeziehungen einge arbeitet wurden, die anderen algebraischen Gleichungen aber beibehalten, erzielten die Autoren kein Rechenergebnis, sehr wahrscheinlich wegen iiberlanger Rechenzeiten; aus anderen Angaben in ihrer Arbeit kann man schlieflen, daf.3 die Rechenzeiten 15 Stunden iiberstiegen haben. Allerdings waren Verdampfungsrate und Riicklauf vorgegeben, um fur den Vergleich mit anderen Programmen einheitliche Bedingungen zu haben, so daf.3 ein ,,Randwertproblem" fiir die Berechnung der Strbme vorlag. Im vorliegenden Entwurf ist dagegen die Berechnung der Strbme ein ,,Anfangswertproblem", also auch in der Teilaufgabe e), in der die algebraische Gleichgewichtsbeziehung implementiert werden soll. Teilaufgabe c): Parameter andern in einem SIMULINK-Model1 kann man aus dem MATLABFenster mit dem Befehl set-parum. Wie das folgende kleine Programm zeigt, besorgt man sich die Pfade zu einem Block, den man ansprechen mdchte, am besten, indem man ihn selektiert und dann den Befehl gcb anwendet. Hier ", der in der Stanhandelt es sich um den Gain-Block im Subsystem ,,T,DT,Y dardform mit l / p multipliziert. Zur Vorsicht sollte man Operationen wie die folgenden erst an einer Kopie des Programms versuchen - hier wird die Kopie DEST- D T -4OBOEDEN-2 benutzt. DEST- P- PROFIL
%linearer Druckanstieg vom Kondensator zum Verdampfer von 1.5 Torr pro Einheit % pp=760: 1.5:821.5; p-rez=ones( 1,42) ./pp; %Pfad fiir den Block im Kondensator:
dest -dT_40Boeden
2/KondensatordT/T,dT//dt,y/Gain%
set-param( 'dest-dTI4OBoeden -2/KondensatordT/T,dT//dt,y/Gain', . .. 'Gain','p-rez( 1)') %l. Boden: nach Selektion des Blocks ergibt der Befehl %ziel = gcb den Pfad:: %ziel = dest-dT-40Boeden-2/ vektor. BodendT/T,dT//dt,y/Gain set param(ziel,'Gain','p -rez(2)')
%DTe Bbden 2 bis 20 for i = 1:19 eval( ['set param("dest d T 40Boeden-2/ vektor. BodendT',num2str(i),... '/T,dT//dt,y/Gain" G i n " ,;p-rez( ',num2str(i+2) ,')'')']) end ,I'
%Zulaufboden %dest_dT_40Boeden -2/ZulaufdT/T,dT//dt,y/Gai n eval( ['set-param(" dest-dT-40Boeden-2/ZulaufdT'.. .. '/T,dT//dt,y/Gain" ," Gain" ," p-rez(',num2str(21),')")'])
%Die Bbden 22 bis 40 for i = 21:39
4.4 Probleme und Ldsungen
187
eval(['set-param(" dest-dT-40Boeden-2/ vektor. BodendT',num2str(i),... '/T,dT//dt,y/Gain" ,"Gain" ," p_rez(',num2str(i+2),')")']) end %Verdampfer %dest -dT-40Boeden-2/VerdampferdT/T,dT//dt,y/Gain set param('dest dT_4OBoeden_2/VerdampferdT/T,dT//dt,y/Gain', ... 'Ga?n','p_rez(42)') Die Anweisungen mugen auf den ersten Blick etwas kompliziert aussehen, besonders die in den FOR-Schleifen; man muB aber nur vier Eigenheiten beachten: 0
a
0
0
Das Argument von eval muB ein String sein. Ein String ist in der internen Darstellung ein Vektor, also auch wie ein Vektor zusammensetzbar. Hochkommas in Strings werden durch zwei aufeinanderfolgende Hochkommas erzeugt. Der Zeilenumbruch mit folgen.
,,...I'
darf nicht mitten in einem (Teil-)String er-
Wenn dieses P r o g r a m gelaufen ist, enthalten die BlUcke in den Kolonnenstufen statt des Ausdrucks ,,l/p" die passenden Elemente des Vektors p-rez. Sie kbnnen mit Hilfe eines entsprechenden Programms den Ausgangszustand wieder herstellen; dabei kunnten Sie gleich den Schbnheitsfehler beseitigen, das der Ausdruck ,,l/plLdie Division ,,l/p" bei jedem Rechenschritt in jedem Block verlangt, also besser im Arbeitsspeicher ersetzt wird durch eine Konstante, den reziproken Wert von p. Ein Anfangsprofil der Molanteile - und das dazugehbrige der Temperaturen l ~sich t auf beschriebenem Wege erst erzeugen, wenn die Voraussetzungen dafiir geschaffen sind. Die Anfangswerte in den Integratoren gelten nicht als Parameter und lassen sich nicht mit set-param ansprechen. Man kann zwar bei einem Start des Modells aus dem MATLAB-Fenster die Anfangswerte tiberschreiben mit einen entsprechenden Vektor in der Argumentenliste des DGl-Lbsers, aber dazu mui3 die Reihenfolge der Integratoren bekannt sein. Diese Reihenfolge kann [, man erhalten fiber den Aufruf [sizes, x0, xstord]=dest-dT-40Boeden-2([, [I, 0), aber sie erscheint vUllig ungeordnet - zumindest auf den ersten Blick; die Elemente des Anfangswert-Vektors mMten dieser Ordnung folgen, um ein gewlinschtes Profil zu erzeugen - ein umsttindliches Unterfangen. Man sollte daher die Zuweisung der Anfangswerte zu den Integratoren anders regeln, entweder von vornherein, was hier nicht geschehen ist, oder jetzt nachtraglich, indem man die Grundbausteine tindert und die Kolonne neu zusammensetzt. Man kann wie folgt vorgehen: Man wtihlt im Integrator-Block als Initial condition source nicht die Standardeinstellung internal, sondern ezternal. Der Block e r h a t daraufhh einen zweiten Eingang, auf den man einen Gain-Block mit x0 (bzw. TO) schaltet, und davor einen Constant-Block rnit 1. uber den Gain-Block l a t sich dann
188 4 Riihrkesselreaktoren wie beim Druckprofil ein Anfangswertprofil erzeugen. Was sol1 der Gain-Block hier? Ein Constant-Block mit x0 wiirde doch geniigen? Wiirde er auch, wenn er sich mit set-param ansprechen lieae. Warum er das nicht tut, gehbrt zu den unkommentierten Geheimnissen von SIMULINK. Teilaufgabe d): Man m6chte aus dem eintretenden Vektor [y(i+l), V(i+l), Li, hv(i+l), y(i), hl, hL, hV, hv, x(i), x(i-l), hl(i-l)] die Grisaen y(i), hv, x(i) und hl ausblenden. Das laat sich mit einem Selector-Block machen, wie die folgende Abb. 4.29 zeigt; man spart hier allerdings nur einen Mux-Block gegenilber dem vorliegenden Subsystem ,,AusgangLL und mua sich dafiir an das Abzahlen bei den Parametern im vektorisierten Selector-Block erst gew8hnen.
Abbildung 4.29: Subsystem ,,Ausgang" mit Selector-Block. Teilaufgabe e): T und y k6nnen nun in einem Subsystem berechnet werden, das die nichtlineare Gleichgewichtsbeziehung als algebraische Schleife implementiert - wenn wir weiter an unserer Strategie festhalten, nur mit Blockschaltbildern zu arbeiten. Solche Schleifen sind in SIMULINK unbeliebt, wie die Warnungen bezeugen, die bei der Simulation im MATLAB-Fenster ausgegeben werden. SIMULINK 2 stellt aber immerhin einen Block Algebraic Constraint fiir diese Zwecke zur Verfiigung. Besonders bei hoher Reinheit des Kopfprodukts werden die Rechenlaufe ungemtitlich langsam. Sie k6nnen Ihren eigenen Entwurf rnit den Blocken im Subsystem ,,Destille" der Privat-Bibliothek (PRIVAT-BIBLIO) vergleichen (Blocknamen ohne dT). Fiir das Vervielfachen von Btrden zu einer Kolonne mui3 die Moglichkeit geschaffen werden, die Anfangswerte der Zustandsvariablen, oder auch andere Parameter, auf beliebige Werte setzen zu konnen. Das geht nur miihsam, wenn man dem Integrator vor dem Vervielfachen einen internen Anfangsvektor zuweist, weil die Reihenfolge der Integratoren nicht der Reihenfolge der Blucke entspricht. (Die Reihenfolge ist ilber [sizes,xO,xstord]=dest-dT-40Boden( [] ,[],[I ,0) zu erhalten.) Man sollte vielmehr einen externen Anfangsvektor wahlen, den man ilber einen Constant-Block und nachgeschaltetem Gain-Block bedient - so
4.4 Problerne und Ltlsungen
189
Abbildung 4.30: Integrator-Block mit externen, programmierbaren Anfangsbedingungen. wie es das folgende kleine Modell (Abb. 4.30) beispielhaft zeigt. (Ein ConstantBlock l&Bt sich nicht ansprechen - eins der unkommentierten Geheimnisse von SIMULINK; siehe auch Teilaufgabe c).) Dann kann man nach dem Vervielfachen jedem Gain-Block iiber seinen Pfadnamen einen individuellen Vektor zuweisen, im Beispiel: set -param('untitled/Gain','Gain','[l
01')
Eine solche Anweisung laat sich mit Hilfe von eval und der entsprechenden Stringkonstruktion als Schleife aufbauen; im Beispiel wtire die Anweisung einfach
[l 01")') %(Hochkommas innerhalb von Strings werden durch zwei aufeinanderfolgen-
eval('set-param(" untitled/Gain" ,"Gain"
,I'
de Hochkommas erzeugt.)% Bei mehreren Subsystemen (Buden) wird die Nummerierung als Laufindex programmiert, z. B.
wie ausprobiert mit
190 4 Ruhrkesselreaktoren eval(['set -param("untitled'," ,'/Gain" ,"Gain" ," [O 1]")'])
Auch die Vektoren, die Gain zugewiesen werden sollen, lassen sich in einer FOR-Schleife einbetten, wie das folgende Beispiel zeigt: a=[1 2;3 41; i=l; set-param('untitled/Gain','Gain',
['[',numZstr(a{i.:)),']'])
ergibt den Vektor [l 21 im Block Gain.
Kapitel 5
Festbettreaktor einphasige Modelle Festbettreaktoren kann man - je nach Bedarf - in verschiedener Tiefe modellieren; Tabelle 5.1 enthalt wesentliche Begriffe.
5.1
Noch einmal Stochiometrie
Urn uns spater bei den komplizierteren FBR-Modellen auf die jeweils neuen Phanomene konzentrieren zu kunnen, werden wir Fragen der Stochiometrie, die bei der Berechnung von Festbettreaktoren immer wieder auftreten, beim einfachsten Modell behandeln und dann in den Hintergrund schieben. Das einfachste Modell ist durch die Begriffe der linken Spalte in Tab. 5.1 gekennzeichnet: Die (Stoff-)Bilanz fur den idealen, isothermen, stationaren, eindimensionalen, einphasigen Festbettreaktor ohne axiale Dispersion lautet filr eine Einzelreaktion (CviAi = 0): d dz
0 = --(..Ti)
+ R,
Tabelle 5.1: Modellierung von Festbettreaktoren. isotherm nichtisotherm eindimensional zweidimensional einphasig zweiphasig keine axiale Dispersion axiale Dispersion stationgr instationar Pfropfstrumung S trilmungsprofil
(5.1)
192 5 Festbettreaktor - einphasige Modelle wobei Ri = vir, Zur Losung dieser Bilanzgleichung kilnnen alle Groaen, die Molstromdichte uc und die Molanteile x i , durch den Umsatz X eines Edukts ausgedrilckt werden. Der Umsatz ist eine wichtige Groli3e in der chemischen Technik. Seine Rolle als Reaktionsvariable bei Modellrechnungen der hier behandelten Art hat aber ihre Bedeutung weitgehend verloren, seitdem nicht nur die numerischen, sondern jetzt auch die symbolischen Methoden darauf verzichten konnen, alle abhlngigen Variablen in der Bilanzgleichung explizit durch eine einzige zu ersetzen. Bei analytischen Rechnungen war das unumgtinglich. Man ktinnte trotzdem a m Konzept des Umsatzes als Reaktionsvariable festhalten, wenn es sich zwanglos auf Mehrfachreaktionen ilbertragen liei3e. Genau das ist aber nicht der Fall. Bei Mehrfachreaktionen ist man daher schon immer auf Reaktionslaufzahlen ausgewichen. Auch dafiir besteht heute keine Veranlassung mehr. Im folgenden wird ein Konzept vorgestellt, das fur Einzel- wie filr Mehrfachreaktionen geschaffen ist. Anstelle des Umsatzes oder der Reaktionslaufzahlen verwendet es (stochiometrische) Schliisselkomponenten. In G1. (5.1) sei (bei einer Einzelreaktion) A k die Schlusselkomponente. Es mussen nun alle abhagigen Variablen durch xk ausgedrilckt werden: Das sind alle xi sowie die Molstromdichte uc. Man kann nun einfachere Differentialausdrucke erhalten, wenn man zungchst den ersten Term in G1. (5.1) aufteilt in
2
( u c ) ist durch die Kontinuittitsgleichung gegeben, die man leicht durch Summierung der Bilanzgleichung (5.1) ilber alle i erhalt: d -(uc) dz
mit u = Cui. xi als Funktion von CuiAi = 0, die besagt:
5k
= ur
(5.3)
folgt aus der stochiometrischen Gleichung
(5.4) Daraus folgt weiter, ebenfalls durch Summieren iiber alle i:
(5.5) Die Bilanzgleichung (5.1) l%5t sich also schreiben:
5.1 Nocb einmal StOcbiometrie
193
wobei alle xi in T ( X ) iiber die Gln. (5.4) und (5.5) durch X k ausgedriickt werden ktjnnen. Bei numerischen oder symbolischen Rechnungen arbeitet man also mit den Gleichungen:
(5.9) die in dieser Reihenfolge in einem U P ,,Rechte Seite" stehen konnten. Nur bei analytischen Rechnungen miiflte man die Ausdriicke fiir uc und zi in die DG1 einsetzen, ein umsttindliches und fehlertrtichtiges Verfahren; dann arbeitet man besser mit dem Umsatz als Reaktionsvariable. Fur n = 0 exakt, und fiir xk << 1 in entsprechender Ntiherung, kann mit uc = const gerechnet werden. (Die Bedingung X k << 1 setzt voraus, d d Ak die stochiometrisch begrenzende Komponente ist. Allgemeiner ist die Bedin(1-fZE)
=
1.) Die Ungleichung betrifft ,,verdiinnte" Reaktionssysteme, z. B. Oxidationen in groflem LuftUberschuB oder Hydrierungen in groflem Wasserstoffuberschufl. Bei komplexen Reaktionssystemen, oft auch kiirzer als Mehrfachreaktionen bezeichnet, benotigen wir zur vollstadigen stbchiometrischen Beschreibung mindestens S sttjchiometrische, voneinander unabhtingige Gleichungen: CvilAi = 0, 1 = l....S. Zur vollsttindigen kinetischen Beschreibung bentjtigen wir R Geschwindigkeitsgleichungen,wobei R die Anzahl der ablaufenden Reaktionen ist. Die S stbchiometrischen Gleichungen ktjnnen angegeben werden, wenn wir alle wesentlichen Reaktionskomponenten identifiziert haben. Die Ermittlung der R tatstichlich ablaufenden Reaktionen ist ein sehr vie1 schwierigeres Problem. Wir wollen die kinetische Modellierung von Reaktionssystemen zuruckstellen und zuntichst die Kenntnis der R Geschwindigkeitsgleichungen voraussetzen. Dann ktjnnen wir den Quellterm v p in der Stoffbilanz erweitern zu C u i j r j , j = l.....R. Wir brauchen nur S Stoffbilanzgleichungen fiir S (Schliissel-)Komponenten Ai, i = 1....S, anzugeben und ktjnnen die Mengenanteile der ubrigen ( N - S) Komponenten aus dem Satz der S sttjchiometrisch unabhtingigen Gleichungen ausrechnen. Dazu partitionieren wir die ( N ,S)-Matrix NN,Sder stbchiometrischen Koeffizienten, gung:
NN,S =
(
Ns,s NN-S,S
)
(5.10)
194 5 Festbettreaktor
-
einphasige Modelle
und berechnen die Molstrbme (genauer: die Molstromdichten) der Nicht-Schliisselkomponenten nach 0 0 0
U C X N - ~= u
c
xN-S
0 + N N - s , ~( N ~ , ~ ) - ' ( u-c ux0~c0xS)
(5.11)
Wenn das Reaktionsgemisch Inertstoffe enthalt, kann man der hdatrix NN,S eine Nullzeile anhangen, entweder fiir jede Inertkomponente oder nur eine fiir das Inertgemisch. Wenn man die stochiometrischen Beziehungen so einrichtet, dai3
Ns,s die Einheitsmatrix ist, kann man sie oder ihre Inverse als Faktor auch weglassen. Aus der vorigen Gleichung laat sich auch unmittelbar die Gesamt-Molstromdichte uc ableiten: u c = u 0c0 (1 - S
W
(1 - STXS)
(5.12)
mit
(S)j
= C(NN,S)Zj
(5.13)
wenn Ns,s die Einheitsmatrix ist, man die stochiometrische Matrix also nach dem Standardverfahren gewonnen hat. Bei Einzelreaktionen heii3t das, dai3 die Schliisselkomponente die stochiometrische Zahl ,,+l" hat. Bei dem herkommlichen Verfahren pflegt man als Schliisselkomponente ein Edukt mit uk < 0 zu nehmen. Wir sollten uns daran gewohnen, dafl die stochiometrischen Gleichungen keine Reaktionen wiedergeben (miissen) und daher die Unterscheidung Edukte und Produkte bei stochiometrischen Rechnungen auch bei Einzelreaktionen unerheblich ist. Bei Mehrfachreaktionen wird diese Unterscheidung sowieso schwierig oder gar unmbglich. Wer sich daran nicht gewohnen mag, m d G1. (5.13) durch den entsprechenden allgemeineren Ausdruck ersetzen:
(5.14) Es sei zumindest erwahnt, d d die Formulierung stbchiometrischer Gleichungen nur eine Konvention und durchaus nicht zwingend ist. Wir konnten uns auch begniigen mit der Element-Spezies-Matrix (ESM), um aus den Mengenanderungen von S Komponenten die Mengenanderungen der restlichen Komponenten auszurechnen. Die Ableitung stochiometrischer Gleichungen aus der ESM-Matrix ist ein Zwischenschritt in diese Richtung. Er bietet allerdings iiber die bessere Anschaulichkeit hinaus den Vorteil, dafl man nicht fiir jede Mengenanderung der Schliisselkomponenten ein lineares, ( N - S)-groi3es Gleichungssystem losen mufl; man kann vielmehr nach G1. (5.11) die Mengenanderungen
5.1 Noch einmal Sttlchiometrie
195
der anderen ( N - S ) Komponenten nacheinander, d. h. unabhgngig voneinander berechnen. Die h d e r u n g der Molstromdichte berechnen wir wie bisher aus der Kont i-Gleichung:
9
(5.15) mit
(s$)j
C(NN,R)ij
(5.16)
Man beachte den Unterschied: Fur die Bilanzgleichungen, sowohl f i r die Schlusselkomponenten als auch fur die Konti-Gleichung, ver-
wenden wir Reaktionsmatrizen NN,R,fur die stochiometrischen Beziehungen zwischen den Schlusselkomponenten und den Nicht-Schlusselkomponenten dagegen die stochiometrische Matrix NN,s, ebenso fur u c als Funktion der Schlusselkomponenten! Natiirlich konnen wir die beiden Matrizen ineinander umrechnen. Wir verzichten darauf, um eine mbglichst anschauliche Modellstruktur beibehalten zu kbnnen. Dazu gehbrt eben auch, d d wir die Reaktionsgeschwindigkeiten fur unser Netzwerk chemischer Reaktionen formulieren und in dieser Form beibehalten. Wir miissen uns nur daran gewbhnen, das sei hier noch einmal wiederholt , zwischen stochiometrischen Gleichungen und chemischen Reaktionen zu unterscheiden: Bei stochiometrischen Beziehungen werden Gleichheitszeichen verwendet, bei chemischen Reaktionen Pfeile. Bei den stochiometrischen Beziehungen wollen wir uns sogar auf eine bestimmte Form festlegen; deshalb ist oben auch von ,,die stbchiometrische Matrix " , s " die Rede. Diese bestimmte Form verlangt, daO die Schliisselkomponenten jeweils nur in einer einzigen stochiometrischen Gleichung auftauchen und dort den stochiometrischen Koeffizienten ,,+l" haben. Bereits bei einer Einzelreaktion unterscheiden wir also zwischen Reaktionsgleichung und stbchiometrischer Gleichung. In dem obigen Beispiel ware die Reaktionsgleichung A + 2B, die stbchiometrische Gleichung dahingegen 2 8 = A. Der Grund ftk dieses Vorgehen ist, daran sei erinnert, d d wir die stUchiometrischen Koeffizienten der Schliisselkomponenten nicht in den Rechnungen mitschleppen wollen. Wir gewinnen diese Matrix, indem wir entweder die ESM (Element-Spezies-Matrix) bilden, sie nach dem Gad-Verfahren auf die gestdelte Form bringen und dann die F'undamentallosung berechnen, oder indem wir das GauO-Verfahren auf die Reaktionsmatrix anwenden. Im ersten Fall (Programm STOICH ) miissen die gewiinschten Schliisselkomponenten als letzte angegeben werden, im zweiten Fall (Programm STOICH:! ) als erste. Die Schliisselkomponenten erhalten dann die stbchiometrischen Koeffizienten ,,+l" fiir je eine stbchiometrische Gleichung. Man kann und sollte dabei gleichzeitig prtifen, ob das Reaktionsnetzwerk vollsttindig ist in dem Sinne, d d in ihm ein vollsthdiger stbchiometrischer Satz enthalten ist;
196 5 Festbettreaktor
-
einphasige Modelle
das ist bei intuitiv aufgestellten komplizierteren Reaktionssystemen keineswegs garantiert.
Zusammenfassung Nun sei das Vorgehen noch einmal zusammengefdt, die Stoffbilanzen fiir einen stationaren FBR zu formulieren; es kann ohne weiteres auf andere stationare Reaktoren iibertragen werden: 1. Wir gehen von einem Reaktionsnetzwerk aus, das wir durch eine Matrix stochiometrischer Koffizienten beschreiben, die ( N ,R)-Reaktionsmatrix NN,R. 2. Wir stellen die Mindestanzahl S an unabhangigen stbchiometrischen Gleichungen auf ( S <= R ) , zweckmaDig in Form der stbchiometrischen ( N ,S)Matrix N N , ~Die . stbchiometrischen Gleichungen diirfen sich von den Reaktionsgleichungen unterscheiden, nicht nur nach Zahl, sondern auch durch Auswahl und Anordnung der Komponenten. 3. Wir stellen die Reaktor-Bilanzgleichungenfur die S Schliisselkomponenten auf:
mit
R k = b k j ~ j , j = l....R 4. Wir benutzen fiir uc als Funktion von xs die Beziehungen
(5.18) mit ( s ) = ~C und fiir
( NN-S,SN,,', ) I
ij
XN-s
0 0 0
XN-S
=
c xN-S
0 + NN-S,S ( N s , s ) - ~ ( ~ ~-x s c xs) 0 0
2~
uc
(5.19)
Diese Beziehungen kann man noch etwas vereinfachen, wenn man Ns,s = I wahlt, den Schliisselkomponenten also die stochiometrischen Koeffizienten ,,+1" zuweist; dann ist ( s ) = ~ C(",s)ij. Zusammen mit der Konti-Gleichung (5.15) erhalten wir die Stoffbilanzgleichungen
(5.20)
5.1 Noch einmal St6chiometrie
197
Die letzten drei Gleichungen ktinnen in dieser Reihenfolge im Unterprogramm ,,Rechte Seite '' eines DG1-Msers stehen. Wir ki-jnnen nun die Enthalpiebilanz hinzufiigen:
dT 4 0 = -UCC - - -h(T - Tu) + C r j ( - A H j ) 'dz dt
(5.21)
Meistens wird anstelle von ucCp der Ausdruck upcp verwendet. Wenn cp(x,T ) als konstant angesehen werden kann, spart man sich so einen Rechenschritt, da u p im stationgren Fall konstant ist. Fiir die Integration der Stoff- und Energiebilanzen gibt es heute eine gro5e Anzahl von gut zugtinglichen DG1-Lasern, die schon im Kapitel4 vorgestellt und benutzt worden sind. Zur obung kann die katalytische Oxidation von GXylol mit Luftsauerstoff zu PSA (und weiteren Produkten), vereinfacht als Einzelreaktion 1. Ordnung bzgl. o-Xylol und Sauerstoff, im Problem 5.5.3 behandelt werden. Die fur die praktische Anwendung wichtigste Erweiterung des FBR-Modells betrifft die radialen Transportprozesse, insbesondere die Wgrmeleitung. Da ein zweidimensionales (einphasiges) Model1 aber durch partielle Differentialgleichungen beschrieben wird, die doch grb5ere Anforderungen an die LUsungsverfahren stellen, sol1 die zweidimensionale Behandlung zuriickgestellt und zuniichst die axialen Transportprozesse behandelt werden. Allerdings la& sich auch mit den bisher ertirterten Methoden fiir das einfache eindimensionale Modell schon eine oft brauchbare Ngherung filr die radialen Profile gewinnen, wie im folgenden gezeigt wird. Wir stellen uns vor, dai3 unsere eindimensionalen Bilanzgleichungen nicht auf den gesamten Rohrquerschnitt angewendet werden, sondern nur an einer bestimmten radialen Stelle T * , die wir noch genauer festlegen miissen. Das radiale Temperaturprofil ntihern wir durch eine Parabel an, die durch diesen Punkt geht und folgende Randbedingungen erfilllt :
(5.22) (5.23) (Eine entsprechende Festlegung der Konzentrationsprofile hilft nicht weiter, da wegen der Randbedingung T = R : = 0 die Parabel entartet.) Die T-Parabel ist durch die drei Vorgaben festgelegt, aus denen sich die Koeffizienten des allgemeinen Ansatzes
9
ergeben zu
198 5 Festbettreaktor - einphasige ModelJe
a1
(a1
=
0
(5.25)
ist wegen der erwfihnten Symmetrie gleich Null.) Damit ergibt sich ftir die T-Parabel: T2
T ( r )= T ( R )+ 0.5Bi(T(R)- Tw)(l- -)
(5.28)
R2
mit Bi = a,,,?. In der Wahl von T* haben wir gewisse Fkeiheit. Eine Misglichkeit ist, T* an der Stelle der mittleren Temperatur zu wahlen:
Bi T ( T *=< ) T >= T ( R )+ -(T(R) 4
(5.29)
- TW)
Daraus folgt
rfR
=
\i-
1 = 0.7071... 2
(5.30)
und weiter iiber
(5.31)
a W ( T ( R-) Tw) = h ( T ( r * )- T w ) der Wfirmedurchgangskoeffizient
(5.32) Damit lai3t sich das radiale T-Profil durch T ( T * ausdrucken: )
(5.33) Interessant ist vor allem die Temperatur in der Rohrachse (bei sie folgt:
T ( 0 )= T ( T * )
+
T ( r * )- Tw 1 + =4
T
= 0); ftir
(5.34)
5.2
FBR rnit axialer Dispersion 199
Wir kihnen die hier angegebene Niiherungsmethode fiir das radiale T-Profil auch als Ein-Punkt-Kollokation bezeichnen. Sphter werden wir sehen, d d die orthogonale Kollokation zur Diskretisierung der radialen Koordinate im zweidimensionalen Modell im speziellen Fall eines einzigen Stiitzpunktes zu einer etwas anderen Wahl fiir r* fiihrt. Jetzt kbnnten wir zuniichst einmal abschiitZen, ob unsere eindimensionale Behandlung des vereinfachten o-Xylol-Beispiels in Problem 5.5.3 zu rechtfertigen ist; das ist in Problem 5.5.4 niiher beschrieben. Die Behandlung eines Festbettreaktors als einphasiges ideales Strbmungsrohr ist eine schnelle und bequeme Mbglichkeit, zu ersten Abschatzungen zu kommen, die rnit parabolischen radialen Temperaturprofilen noch einfach erweitert werden kbnnen. (Das hier beschriebene Modell wird manchmal etwas umstandlich als ,,pseudo-homogen-quasi-eindimensional"bezeichnet.) Es kbnnte sich daher lohnen, ein Programm zu erstellen, das sich auf beliebige Reaktionen anwenden l a t ; eine Moglichkeit wird im Problem 5.5.4 vorgestellt.
FBR mit axialer Dispersion
5.2 5.2.1
Modellgleichungen und Diskussion der Randbedingungen
Wir erganzen die Stoff- und Enthalpiebilanz um die Dispersionsterme cD,,$$? bzw. machen sie dimensionslos und erhalten
&,s, o=---
1 d (ucx;) uoco dz
+ Pe,.,1
dpd2xi L +mlt, L dz2 u c
(5.35)
(5.36) Hier ist z := f . Randbedingungen:
(5.37) rnit q5 = xi oder T . In erster Naherung kann fiir Pe,,, ein Wert von 2 eingesetzt werden, fiir Peh,, ein Wert von 1. (Das gilt fiir Re, > 10.) Genauere Werte kann man z. B. aus Angaben im VDI-Wiirmeatlas erhalten. Urn das Dispersionsmodell und insbesondere um seine Randbedingungen hat es bis in die jiingste Zeit zahlreiche Diskussionen gegeben. Da wir hier mit numerischen Verfahren beschtiftigt sind, wollen wir nicht allzu tief einsteigen, aber doch wenigstens einige Argumente kritisch betrachten, denn die Anforderungen an numerische Verfahren werden j a vom Modell wesentlich gepriigt. Zu den Hauptargumenten zahlen:
200 5 Festbettreaktor - einphasige Modelie 1. Das Modell beschreibt eine unendlich schnelle Signalausbreitung, die unrealistisch ist.
2 . Der Konzentrations- bzw. Temperatursprung, den die linke Randbedingung angibt, ist unrealistisch.
3. Es gibt kein beweiskraftiges Argument f& die rechte Randbedingung. Zu 1.: Es ist richtig, dai3 eine unendlich schnelle Signalausbreitung nicht sein kann, aber diese Modellbehauptung teilt das Dispersionsmodell rnit vielen anderen Modellen, bei denen sie unbeanstandet bleibt, so z. B. mit dem P e n e trationsmodell oder dem Zellenmodell. Man soll eine mathematische Aussage interpretieren und nicht buchstablich nehmen. Es ist unerheblich, dai3 mathematisch in beliebiger Entfernung von einer Signalquelle ein endlicher Wert der entsprechenden Zustandsgrbae wie der Konzentration angesagt wird, wenn dieser Wert vie1 zu klein ist, um praktisch ins Gewicht zu fallen. Zu 2.: Auch hier kbnnte man zunachst darauf hinweisen, daf3 Sprilnge in einer Zustandsgrbfle - obwohl streng genommen unrealistisch - in anderen Modellen nicht beanstandet werden, z. B. im Modell des idealen DurchfluD-Riihrkessels. Dariiber hinaus handelt es sich aber um eine unzureichende Interpretation einer mathematischen Formulierung. Ob der Sprung in der Konzentration (oder der Temperatur) unrealistisch ist oder nicht, ist unerheblich: Die mathematische Aussage bezieht sich auf den (Stoff-)Flufl und besagt, daB dieser stetig zu sein habe. Man kann ohne weiteres beriicksichtigen, dai3 vor Beginn der Reaktionszone mindestens molekulare Diffusion herrschen mui3, ein Konzentrationssprung also in der Tat nicht auftreten kann; die Randbedingung bei z = 0 ware dann wie folgt zu formulieren:
$(-O)
-
1 dpd$(-O) 1 d d$(+O) = $(+O) 7 - -2PeO L Pe L dz
(5.38)
Die Aussage bleibt aber dieselbe: Der FluB ist stetig, rnit anderen Worten: Was von links bei z = 0 ankommt, fliei3t rechts weiter, und ist (solange der stationtire Zustand betrachtet wird!) gleich dem Flu13 durch jeden Querschnitt vor dem Eingang. Insofern sind die beiden Formulierungen der Randbedingung gleichwertig. Zu 3.: Auch am rechten Rand sollte der Flu13 stetig sein. Wenn dort dann ein Profil rnit endlichem Gradienten existiert, m a t e die Konzentration (oder die entsprechende Zustandsgroae) im nachgelagerten Teil einen hoheren oder niedrigeren Wert haben als am Ausgang der Reaktionszone. Wie das zustande kommen soll, ist unverstandlich. (Am linken Rand macht die Reaktion einen solchen Verlauf moglich.) Daher ist die einzig vernilnftige Annahme, dai3 das Profil im Reaktor mit Anstieg Null am rechten Rand einlauft. (Gleiche Konzentration links und rechts am rechten Rand sagt auch das Zellenmodell fiir einen Festbettreaktor an - und zudem einen Konzentrationssprung am linken Rand!) Die Randbedingungen sind also konsistent mit dem Modell. Eine wirkliche Schwache des Modells ist, dafl nicht alle Erscheinungen einer Dispersion rnit
5.2 FBR rnit axialer Dispersion
201
einem Diffusionsprozefl vergleichbar sind. Das kommt merkwtirdigerweise sehr vie1 seltener zur Sprache. J. Hiby [15], der als erster auf den folgenden Sachverhalt hinwies und auch ein Experiment zum Beleg vorschlug, hatte viele Jahre lang Miihe, mit seiner Argumentation durchzudringen. Stellen wir uns vor, wir ftihren einer stationtiren Strbmung eines Gases in einem FBR seitlich einen konstanten Strom eines anderen Gases als Markierungssubstanz zu. Dann wird man aufgrund der Diffusion auch stromaufwgrts diese Substanz nachweisen und quantitativ erfassen ktrnnen. Die Auswertung eines solchen Experiments ergibt bei einem echten Diffusionsprozefl den entsprechenden Diffusionskoeffizienten; beim FBR wiirde man nicht den fiir die durchstrtrmte Schiittung zustiindigen Dispersionkoeffizienten erhalten, sondern im Prinzip nur den molekularen Diffusionskoeffizienten des Gaspaares: Dispersion ist Voreilen und Zurilckbleiben gegeniiber der Stromung, sie wirkt sich in Bezug auf ein festes Koordinatensystem nicht stromaufwtirts aus. Bei der Warmeleitung im gasdurchstromten Festbett ist das etwas anderes: Axiale Stoff- und Warmeleitung sind keine analogen Prozesse. Es gibt eine echte Wgrmeleitung iiber die Feststoffphase, also auch stromaufwats, zuslitzlich zur Ausbreitung durch Dispersion.
5.2.2
Schuherfahren und Diskretisierung
Mit den Bilanzgleichungen fiir den FBR mit axiaIer Dispersion und den zugehorigen Randwerten haben wir ein Zweipunkt-Randwertproblem vorliegen, das mit verschiedenen Methoden gelbst werden kann.
SchuDverfahren
Es liegt nahe, fiir die fehlende Anfangsbedingung einen Wert anzunehmen und diesen so lange zu variieren, bis die Losung den vorgegebenen anderen Randwert trifft - diese Methode hei5t deshalb auch Schuaverfahren. Dabei kann es durchaus Schwierigkeiten geben, z. B. kann ilber Erfolg oder MiBerfolg die SchuBrichtung entscheiden, wie Sie im Problem 5.5.6 ausprobieren ktrnnen.
Diskret isierung Eine andere, hgufig gewlihlte Lbsungsmethode filr Randwertaufgaben besteht darin, die DGls zu diskretisieren. Die wohl bekannteste Diskretisierungsmethode ist die finite Differenzenmethode. Wir wollen uns in diesem Buch auf die finite Volumenmethode (FVM) stiltzen - treffender, aber llinger, ist die Bezeichnung ,,Methode der finiten Bilanzvolumen". Die FVM kann ohne prinzipielle h d e r u n g angewendet werden auf gewohnliche und partielle DGls, auf Anfangs- und Randwertprobleme; nur die Koeffizienten der diskretisierten Gleichungen andern sich entsprechend. Bei dem gerade behandelten Fall der axialen Dispersion im FBR ist kein SchuSverfahren oder eine andere neue Lbsungsstrategie erforderlich; die Randbedingungen werden
202 5 Festbettreaktor
- einphasige Modelle
einfach in die diskreten Gleichungen eingebaut. Die Rechnung nach der Potenzmethode entscheidet zudem selbsttindig, ob die k a l e Dispersion beriicksichtigt werden mui3 oder nicht. Die Diskretisierung der Stofiilanzgleichung fur den FBR mit axialer Dispersion ist einer Teilaufgabe im Problem 5.5.6 vorbehalten. Sie kann durch Vereinfachung der diskretisierten allgemeinen Gleichungen fur drei Dimensie nen gewonnen werden, die im Abschnitt 5.4.2 wiedergegeben sind. Die Diskretisierung nach der FVM sol1 hier zunachst an einem einfachen Beispiel skizziert werden, das aber schon den instationtiren Fall einschlieot. Es handelt sich um die instationiire Wikmeleitung in einer ebenen Reaktorwand mit Wtirmeiibergang auf beiden Seiten. Die PDGl ist
(5.39) Die Anfangs- und Randbedingungen sind:
t = 0: z
= 0:
T,,, =Tw(0) ar(Tr- T w ) = - X w -
(5.40)
aT, dz
(5.41) (5.42)
Wir integrieren die PDGl - im folgenden ohne den Index w geschrieben iiber ein Volumenintervall A1 und ein Zeitintervall At. Das Langenintervall erstrecke sich von w bis e gemiifl Abb. 5.1 und umschlieae den Gitterpunkt P. Zur Verallgemeinerung sei X als ortsabhiingig angenommen. Es ist dann
Um den Ausdruck in eckigen Klammern iiber den Zeitschritt integrieren zu konnen, miissen wir eine Annahme iiber den Verlauf von TE , Tp und Tw in diesem Zeitintervall treffen. Die drei bekanntesten Methoden heioen: 0
Explizit: T nimmt am Ende des Zeitschritts den neuen Wert an.
0
Implizit: T nimmt zu Beginn des Zeitschritts den neuen Wert an.
0
Crank-Nicholson: T iindert sich im Zeitinterval linear vom Anfangs- auf den Endwert.
Wir wiihlen die implizite Formulierung und erhalten formal das Produkt aus Klammer und Zeitschritt At; inhaltlich miissen wir allerdings die T-GrtiBen umdeuten von Variablen zu Variablenwerten zur Zeit t At. Wir kilnnen jetzt das Diskretisierungsergebnis zusammenfassen zu der Form
+
5.2 FBR mit axialer Dispersion
203
(5.44)
(5.45) (5.46) (5.47) (5.48) (5.49)
I
i
I
!
n
w
j W
~
I
~
I
n
je
- -
n
!
P
E
Az
- 2
Abbildung 5.1: Eindimensionales Diskretisierungsgitter.
Urn das Gleichungssystem ltisen zu ktinnen, mussen noch die Randbedingungen eingearbeitet werden. In vielen Fdlen kann man die RBs einer der folgenden drei Arten zuordnen: 1. Gegebene Randwerte
2. Gegebene Fliisse
204 5 Festbettreaktor - einphasige Modelle 3. Implizit fiber Umgebungstemperatur und Wgrmeiibergangskoeffizienten gegebene Fliisse. Unsere RBs sind von der dritten Art. Fiir das (halbe) Bilanzvolumen um den (linken) Randpunkt B nach Abb. 5.2 ergibt sich: (5.50) oder (5.51) mit (5.52) (5.53) (5.54)
Entsprechendes ergibt sich fUr den rechten Rand.
Abbildung 5.2: Halbes Bilanzvolumen am linken Rand.
Um die diskretisierten Gleichungen mit einem Rechenprogramm zu h e n , ist es zweckmgflig, die Gitterpunkte zu numerieren, und zwar von 1 (linker Randpunkt) bis N (rechter Randpunkt). Wir erhalten dann
5.2 FBR mit axialer Dispersion
205
(5.55)
AT=b
(5.56)
(wobei T ein Vektor ist). Dieses lineare Gleichungssystem k6nnen wir leicht losen, wobei wir die besondere Struktur der Matrix A ausnutzen. A hat niimlich eine Bandstruktur; sie ist dreibandig oder eine 'Ikidiagonal-Matrix, da nur die Diagonale sowie die Ober- und Unterdiagonalen besetzt sind (Abb. 5.3).
0 0
2
-
0
0
0 0
4-
6-
a10-
0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-
Abbildung 5.3: Tridiagonale Matrix.
Solche Matrizen lassen sich besonders vorteilhaft nach dem Thomas-Algorithmus (TDMA) behandeln (s. Lehrbiicher der numerischen Mathematik); in MATLAB ist es noch einfacher, es geniigt eine einzige Anweisung. Abb. 5.4 zeigt ein Wandtemperaturprofil, das sich nach einem Sprung der Manteltemperatur von Tj = 80 auf Tj = 70 "C innerhalb einer Zeitspanne ausgebildet hat, die 10 % der Zeitkonstante der Wand entspricht. Die Rechnung wurde mit dem M-File FTW durchgefiihrt.
206 5 Festbettreaktor - einphasige Modelle
354
.-c I-
348 346 344-
2
4
6 8 Stutzstelle
10
Abbildung 5.4 Wandtemperaturprofil nach Sprung in Tj.
- - Anfangsprofil; - nach 10 % der Zeitkonstante. FTW
function T w = fiw(alphar,alphaj,dt,Tr,Tj) global Twold swand rhowand cpwand dx A lambdaglas = (.0005 * (Tr+Tj)/2 ,827)
+
tauw=rhowand*cpwand/lambdaglas*swand
* ,001; A
dt=dt/tauw; r=lambdaglas/alphar/swand; s=lambdaglas/alphaj/swand;
Nx=round( l/dx+l); Nt=round( l / d t ) ; ae=l/dx; aw=l/dx; dxdt=dx/dt; aOp=dxdt; ap=ae+aw+aOp; % D=sparse( 1:Nx, 1:Nx,ap); % D(l,l)=ae+l/r; % D(Nx.Nx)=aw+l/s; % W=sparse(2: Nx, 1:Nx-1,-aw,Nx, Nx,Nx-1); % E=sparse( 1:Nx-1,2: Nx,-ae,Nx,Nx, Nx-1);
% A=W+D+E; for i = 1:Nx-1 A( i ,i) =ap; A(i+l,i)=-aw;
2;
5.2 FBR rnit axialer Dispersion 20’7
+
A( i,i I)=-ae; end A( l,l)=ae+l/r; A( Nx, Nx)=aw+l/s; b=aOp*Twold; b( l ) = l / r * T r ; b( Nx)=l/s*Tj; Tw=A\ b;
Der einfache Befehl A\b erspart dem Benutzer viel Programmierarbeit. Die PDGl und die RBs wurden dimensionslos gemacht, wie es aus den entsprechenden Anweisungen hervorgeht. Das Programm wurde geschrieben, um online das Wandtemperaturprofil in einem Reaktionskalorimeter zu berechnen - daher die Argumentenliste und die global-Anweisungen. Fiir den vorliegenden Zweck miissen zuntichst die Parameter besetzt werden: FT W - D AT
global Twold swand rhowand cpwand dx rhowand = 2230; % kg/rn3 Dichte swand = 0.005; % rn Wandstaerke cpwand = 0.7735; % kJ/kg/K spez. Waerrne dx=O. 1; Tr=353.16;TrO=Tr;Tj=343.16; Twold=TrO*ones( l / d x + l , l ) ; alphar=2;alphaj=4;kW/m2 K larnbdaglas = (.0005 * (Tr+Tj)/2 ,827) * .001;
+
tauw=rhowand*cpwand/larnbdaglas*swand -2;%Zeitkonstante der Wand%
dt=tauw/lO;
Dann kann mit T w = ff w (aI phar , aI phaj ,dt ,Tr,Tj)
das Temperaturprofil berechnet werden, das in Abb. 5.4 gezeigt ist. Die numerische Lbsung ist sehr viel einfacher zu gewinnen und auch zu handhaben als die analytische Lbsung, obwohl es sich um ein lineares Problem handelt. Wegen der gegebenen Linearittit mui3 auch bei der Diskretisierung nicht linearisiert und bei der h u n g nicht iteriert werden. Bei der Aufgabe, ein Temperaturprofil in einem adiabatischen FBR mit axialer Dispersion zu berechnen, wird sich das andern (Problem 5.5.8). Die im Programmausdruck wegkommentierten Zeilen zeigen, wie man in MATLAB eine sparse Matrix besetzen kann. Bei feinerer Diskretisierung spart man so erheblich an Speicherplatz (und an Rechenzeit), nimmt doch eine volle (1000,10OO)-Matrixbereits 8 MB ein.
208
5 Festbettreaktor - einphasige Modelle
5.2.3
Mehrzielmethode (Bulirsch'sches Randwertproblem)
Die einfachen Schufiverfahren versagen gelegentlich bei Randwertproblemen. Bei der Suche nach einem der fehlenden Anfangswerte werden Kombinationen erzeugt, die das verwendete Integrationsverfahren instabil werden lassen. Notorisch instabil ist z. B. der isotherme FBR mit axialer Dispersion, wenn vom linken Rand aus (,,bergab") integriert wird. Dann stilrzt die Rechnung sogar ab, wenn die exakten Anfangswerte eingesetzt werden (exakt auf Maschinengenauigkeit). Man kann sich dann helfen, indem man vom rechten Rand her (,,bergauf ") integriert. Sicherer ist es, eine Erweiterung des einfachen Schuherfahrens einzusetzen, das 'Mehrfachschuflverfahren, meist etwas kiirzer Mehrzielmethode genannt . Bei der Mehrzielmethode wird das zu ilberbrilckende Integrationsintervall in Abschnitte eingeteilt und von Abschnitt zu Abschnitt ,,geschossen". Man hat dann iterativ dafilr zu sorgen, daB die Schufibahnen der einzelnen Abschnitte eine stetige Gesamttrajektorie bilden: Der ,,Einschlag" am Ende des einen Abschnitts mufl exakt der ,,Abschuflort" fur den folgenden werden. Wir folgen der Darstellung in [16]: Betrachten wir das System aus n DGls dy = f(t,y)
dt
(5.57)
mit den Randbedingungen
Wir wtihlen im Bereich [a,61 m Stiltzstellen
Es miissen nun n Vektoren sk gefunden werden, die die Bedingungen erfiillen (5.60) (5.61) Diese beiden Gleichungen bilden ein n x m grofies, i. a. nichtlineares Gleichungssystem, dessen Lbsung die gesuchten Vektoren liefert. Die Werte Y(tk+l;tkr sk) ergeben sich durch Integration des DG1-Systems von tk bis tk+l mit den Anfangswerten sk. Wie wiihlt man die Stutzstellen? Man wahle eine moglichst gute Starttrajektorie yO(t) im Bereich [ a , 6 ] ,setzt t l = a und beginnt die Integration des = f ( t , y ) y, ( t 1 ) = yO(t1);man bricht die Integration Anfangswertsproblems an einer Stelle t 2 ab, an der die Lesung y ( t 2 ) ,,zu stark" von yO(t2) abweicht; an
5.2 FBR mit axialer Dispersion
209
dieser Stelle beginnt man die Integration neu mit dem Anfangsvektor yO(t2). Dieses Verfahren setzt man fort, bis man t = b erreicht hat. yO(t1, t 2 , ....tm) wird dann als Startvektor fltr die Lbsung des nichtlinearen Gleichungssystems benutzt. Was eine ,,zu starke" Abweichung ist, mui3 gegebenenfalls durch P r e bieren herausgefunden werden; ein Anhaltspunkt ist z. B., dai3 die Norm Ily(t,)ll ein Vielfaches von IlyO(ti)ll nicht tibertrifft. J e groi3ztigiger man hier ist, umso weniger Stiitzstellen wird man benbtigen, umso grbi3er wird aber auch die Gefahr , dai3 im Verlauf des LUsungsverfahrens ftir das nichtlineare Gleichungssystem Bedingungen auftreten, bei denen die Integration in einem Interval1 lrabstilrzt ".
Randwertproblem von Bulirsch Die DG1
d2Y
(5.62)
dx2 mit den Randbedingungen
(5.63) ist ein von Bulirsch [17] eingefilhrtes, besonders bemerkenswertes Beispiel fur ein Randwertproblem, das sich z. B. fiir p = 60 nicht nach dem Schdverfahren h e n ltii3t. Dazu wltrden wir wie tiblich die DG1 in zwei DGls erster Ordnung umformen, dYl -
dx = Y2 dY2 - p2yl - (p2 dx
(5.64)
+ n2)sin(nx)
(5.65)
und den fehlenden Anfangswert y2(0) suchen. Selbst wenn wir zuftillig auf den richtigen Wert y2(0) = n stoi3en sollten, ltiat sich das DG1-System nicht integrieren. Versuchen wir es mit dem Programm BOCKDGL, in dem T durch einen allgemeinen Parameter par ersetzt ist: global rnue par rnue=60; par=pi; [t,y]=ode45('bockdgl' ,[0,1],[0 pi]); PlOt(t,Y)
Warum stiirzt die Integration ab (Abb. 5.5), obwohl die (auf Maschinengenauigkeit) genauen Werte als Anfangswerte eingegeben werden?
210 5 Festbettreaktor - einphasige Modelle
108-
I I I
, I L
6-
I I
I I
4-
I. I I
I
,
2-
I . I I
, I
-
Abbildung 5.5: Integration des Bulirsch’schen Randwertproblems mit den Anfangswerten der analytischen LUsung.
Die analytische Losung des DG1-Systems ist yl(z) = C1 sinh(mz)
+ C2 cosh(mz) + s i n ( m )
(5.66)
Aus den Randbedingungen folgt C1 = C2 = 0. Es sei nun die Anfangsbedingung yz(0) gestort: yz(0) = 7r +- E . Dann ergibt sich fiir die Integrationskonstante C1 = und damit fiir die gestorte Losung
5
E
y# = m sinh(mz) + sin(7rz)
Mit
E
(5.67)
als Mail fiir die Maschinenengenauigkeit,
ePs M S
=
2.2204e-016
und m = 60 folgt y # ( l ) = & sinh(60): eps/60*si n h(60) ans =
2.1131e+008
statt des exakten Wertes Null; so entsteht eine alles iiberwuchernde parasitare Losung y#.
5.2 FBR rnit axialer Dispersion
211
Versuchen wir die Mehrzielmethode! Im Programm MEZIEL2 (nicht fur SE), in dem die unabhtingige Variable t statt z heifit, ist als Anfangstrajektorie y = 5t(l - t ) gewtihlt. Man kann den Faktor vor der Norm norl in Zeile 6 tindern, oder auch das Integrationsintervall delt. Die Integration wird in deltSchritten solange fortgesetzt, bis die Norm-Bedingung nicht mehr erflillt ist: Der entsprechende t-Wert wird als Stiitzpunkt gespeichert (tfvek) zusammen mit den zugehorigen y- und y'-Werten, yvek und yveks. (Gespeichert werden zu Kontrollzwecken auch die Normen in norlvek und nor2vek.) MEZIEL~
tfvek=[];tf=O;delt=O.Ol;tend=l;yvek=[];yveks=[];
norlve k= [I; nor2ve k= 0; while tf < tend norl=l; nor2=0; xO( 1)=5*tf*( l-tf);x0(2)=5-10*tf; while nor2 < 20*norl & tf < tend tO=tf; tf=tO+delt; xf( 1)=5*tf*( 1-tf);xf(2)=5-10*tf; norl =sq r t (A(1)*xf( 1)+xf( 2) *xf(2)); norlvek=[norlvek;norl]; [t,y]=ode45(' bockdgl',[tO,tf],xO); sit=size(t); if sit(1) > sit(2) si=sit( 1); nor2=sqrt( y( si,I)*y(si,l)+y(si,2)*y(si,2)); nor2vek=[ nor2vek;nor2]; xO( l)=y( si,l);xO(2)=y(si,2); else si=sit(2); nor2=sqrt( y (1si)*y(1,si)+y( 2 ,si) *y(2 5 ) ) ; xO( l)=y( l,si);xO(2)=y(2,si); end%if endxwhile 1 tfvek=(tfvek;tf]; yvek=[yvek;y(si,l)]; yveks=[yve ks;y( si ,2)]; end%while 2
Ein Lauf von MEZIEL2 bringt folgendes Ergebnis: global tfvek;[tfvek,yvek,yveks] am = 8.0000e-002 2.1304e+000 1.1596e+002 1.3OOOe-001 1.7915e+000 8.6247e+001 1.8000e-001 2.3671e+000 1.1207e+002 2.2000e-00 1 1.8108e+000 7.1770ei-001
212 5 Festbettreaktor
-
einphasige Modelle
2.6OOOe-001 1.9893e+000 7.6602e+001 3.OOOOe-001 2.1267e+OOO 7.9661e+OOl 3.3OOOe-001 1.6171e+000 4.4617ef001 3.6OOOe-001 1.6703e+ 000 4.4858e 00 1 3.9000e-001 1.7120e+OOO 4.4892e+001 4.2OOOe-001 1.7429e+000 4.4781e+001 4.5000e-001 1.7637e+OOO 4.4579e+001 4.8000e-001 1.7747e+OOO 4.4323e+001 5.1OOOe-001 1.7764e+000 4.4038e+001 5.4OOOe-001 1.7689e+000 4.3734ef001 5.7OOOe-001 1.7521e+000 4.3408ef001 6.OOOOe-001 1.7259e+000 4.3043e+00 1 6.3OOOe-001 1.6899e+000 4.2608e+001 6.6OOOe-001 1.6436e+OOO 4.2059e+001 7.0000e-001 2.1664e+000 7.8254e+001 7.4OOOe-001 2.0541e+000 7.6033e+001 7.8OOOe-001 1.9096e+000 7.262 le+001 8.2000e-001 1.7270e+000 6.7583e+001 8.7OOOe-001 2.3412e+000 1.1313e+002 9.2OOOe-001 1.8072e+000 8.9926e+00 1 9.8OOOe-001 1.8951e+000 1.0657e+002 1.0000e+000 2.1875e-002 -2.9668e+000
+
Mit yvek und yveks bilden wir nun zusammen mit den Randbedingungen einen Anfangssch&zwert des Parametervektors XO fiir die Optimierroutine fsolve; sie soll die Werte an den Stiitzstellen finden, die die Gln. (5.60) und (5.61) erfullen: XO=[yvek.yveks];
xo= [0,o ;XO];
tic;X=fsolve( 'bockfun',XO);toc elapsed-time = 2.0328e+002
Wir vergleichen die gefundenen X(:,l)-Werte, also die yl-Werte an den Stiitzstellen, mit der analytischen L6sung und kihnen im Rahmen der Zeichengenauigkeit keinen Unterschied feststellen (Abb. 5.6). Man kann nun durch Integrieren von Stiitzpunkt zu Stiitzpunkt einen glatten Verlauf der Usungskurve bekommen - das sei dem Leser iiberlassen. In BOCKFUN, dem UP fUr fsolve, ist die Mtjglichkeit ,,wegkommentiert ", das Bulirsch-Problem ah Anfangswertproblem zu formulieren; ist die Mehrzielmethode in diesem Fall auch erfolgreich? Bitte ausprobieren!
5.3 Instationtirer FBR mit axialer Dispersion
213
Abbildung 5.6: LUsung des Bulirsch'schen Randwertproblems mit der Mehrzielmethode (-) und Vergleich mit der analytischen Usung (0).
BOCKFUN
function F = bockfun(>() global tfvek tf=O;iz= 1;F=[]; while tf < 1 tO=tf;tf=tfvek( iz); xO=X(iz,:); [t,y]=ode45('bockdgl',[to tf],xO); sit=size(t); iz=iz+l;
F=[F;y(sit(l),:)-X(iz,:)];
end % F=[F;X( l , l ) , X (1,2)-pi]; F=[F;X( 1,1),X(iz, l)];
Instationiirer FBR mit axialer Dispersion
5.3
Wir verbinden die StofFbilanz gleich mit der Kontinuitstsgleichung und erhalten in dimensionsloser Form:
wobei
t
:=
2 und uj = C V , ~ .
214 5 Festbettreaktor - einphasige Modelle Enthalpiebilanz:
+
L 'LL
P
(5.69)
Crj ( -AHj) cp
( p c , ) ~bezieht sich auf das Reaktionsvolumen und setzt sich aus Beitrtigen beider Phasen zusammen. Im instationtiren FBR kann man strenggenommen nicht die Randbedingungen des stationtiren verwenden, sondern mui3 mit einem ,,dreigeteilten '' S t r b mungsrohr rechnen: Man mui3 die Bilanzen der vor- und nachgelagerten Zcnen zusammen mit den beiden angegebenen Gleichungen so lbsen, dai3 an den Schnittstellen die allgemeinen Randbedingungen erfiillt sind. Im allgemeinen vernachliissigt man die Akkumulation in der Stofiilanz; in der Ent halpiebilanz benutzt man meistens die Danckwertsschen Randbedingungen, was eigentlich nur zuliissig ist, wenn die vorgelagerte Zone feststomrei ist. Eine wichtige Anwendung haben die instationtiren Bilanzen bei dem FBR mit wechselnder Strtjmungsrichtung gefunden [MI; sie werden z. B. zur katalytischen Reinigung von Abgasen eingesetzt, deren chemischer Energieinhalt nicht ausreicht, eine stationtire Reaktion zu unterhalten. Im folgenden wird das beispielhaft fur vereinfachte Bedingungen dargestellt . Wie htiufig in diesem Buch wird dieses Beispiel in ein Problem gepackt (Problem 5.5.9), damit Sie sich selbst mit der Lbsung beschGtigen kbnnen.
5.4 5.4.1
FBR mit radialer Dispersion Modellgleichungen und Randbedingungen
Wir erweitern die Bilanzgleichungen filr einen FBR urn radiale Dispersionsterme, fassen Parameter zu dimensionslosen Gruppen zusammen und erhalten:
1 d(ucx) uoco
-
aZ
aT _ -
a~
1 d, L l a x (-~ e , , , , ,R . R Tar
1 dp L 1 d T (-R R r ar
a2x
L
+ -)a T 2 + x",rrr(x) c
2T L + -)ddr2 + -rT(-AH) up~,
In diesen Gleichungen sind z und r dimensionslos: z := z / L , r := TIR. Die Randbedingungen sind: z = 0 : zi = ziolT= To fiir alle r; T=O:aZ'=Oar=O 8r ' Or T = 1 : ~!SL=O,Bi.(T-T,) = -z 8T 8r
(5.70)
(5.71)
5.4 FBR mit radialer Dispersion 215
Wenn es erforderlich ist, kbnnen wir die Stofiilanz durch entsprechende Manipulation des Terms UC noch umformen, wie es die Gln. (5.18) bis (5.20) zeigen; da wir uns hier auf die Behandlung der PDGls konzentrieren wollen, werden wir in den Beispielen Uberwiegend mit Reaktionsbedingungen arbeiten, bei denen man Molzahltlnderungen vernachl&sigen kann: uc = uoco. In erster Ntiherung l&t sich fur die radiale Pe-Zahl ein Wert abschtltzen, der auf folgender einfacher Modellvorstellung iiber die radiale Dispersion in einer durchstrbmten Schtittung beruht: Die Fluidelemente weichen den Feststoffpartikeln regellos nach links oder rechts aus; dann ist die mittlere radiale Verschiebung Z2 = 2D,t. Bei einem einmaligen Ereignis ist 3 = 0.5 * d p und t = d p / u ; daraus ergibt sich u d p / D r = Pe,., = 8. Experimentell werden die radialen Pe-Zahlen (fur die Stoffdispersion) zwischen 8 und 15 gefunden mit einem Haufungspunkt in der Ntihe von 10. Filr eine erste grobe Abschatzung kann man mit Pem,r = 10 und Peh,, = 5 rechnen. Im Gegensatz zur axialen Dispersion ist jedoch der E i n f l d der radialen Wtlrmedispersion von so groi3em Einfld, dai3 man die radialen Wtlrmetransportkoeffizienten A, und a, mbglichst genau ermitteln mui3. Es gibt daher auch eine Vielzahl von Messungen und Korrelationen in der Literatur (VDI-Wtlrmeatlas).
5.4.2
Methode der finiten Bilanzvolumina (Finite Volumenmethode)
Wir folgen der Darstellung in Patankar (191, um die Einarbeitung in sein Buch zu erleichtern, und benutzen auch seine Nomenklatur; Umformungen fur unsere Zwecke bleiben uns bei keiner allgemeinen Darstellung erspart. Im Abschnitt 5.2 wurden die Grundlagen der Methode - Diskretisierung und Integration iiber ein Bilanzvolumen - anhand einfacher, eindimensionaler Beispiele schon b e s p r e chen. Hier gehen wir zu einer allgemeinen, dreidimensionalen Darstellung iiber , beschranken uns aber auf die Ausgangsgleichung und die Ergebnisse; der interessierte Leser sollte sich insbesondere die Behandlung der Konvektion mit Diffusion im Buch von Patankar anschauen sowie die Einfuhrung des sog. PotenzGesetzes. Wir gehen aus von einer allgemeinen Bilanzgleichung, die durch Interpretation der Terme auf die Gleichungen der Stoff-, Enthalpie- und Impulsbilanzen in nicht allumfassenden, aber weitverbreiteten Formen filhrt:
a
-( p $ ) = - div(pur$)+ div(r grad
at
4) + S
(5.72)
r vertritt den jeweiligen llansportkoeffizienten. In der Stoffbilanz ist die abh&ngige Variable 4 gleich dem Masseanteil wi; wir ziehen fur m e r e Anwendungen in der chemischen Reaktionstechnik molare Groi3en vor, vor allem, weil die kinetischen Gesetze sich anschaulicher formulieren lassen. In der Enthalpiebilanz ist 4 gleich der massebezogenen Enthalpie h; diesem Gebrauch schlieflen wir uns an, formen aber die Gleichung um,indem wir die
216 5 Festbettreaktor - einphasige ModeIle Kontinuittitsgleichung einbeziehen und dh durch c,dT ersetzen (und dabei meist stillschweigend - ideale Verhtiltnisse annehmen). In der Impulsbilanz fiir eine Rchtung, z. B. die x-Rchtung, ist 4 gleich u,, der Strbmungsgeschwindigkeit in x-Richtung. Sptitestens hier kommt man aber i. a. mit einem diffusiven Term div grad nicht aus; andere viskose Einfliisse werden in den Quellterm hineingezogen, der angegeben wird als
ax + B, + V,
aP S = --
(5.73)
wobei B, fiir die in x-Rchtung auf das Volumenelement ausgeiibten tiufleren Krafte steht und V, fiir die viskosen Terme, die zustitzlich zu div(y grad u) auftreten. Der Druckgradient wird bei den numerischen Anwendungen der Impulsbilanz zweckmtiflig aus dem allgemeinen Quellterm abgetrennt und fiir sich behandelt. Die Diskretisierung der allgemeinen Bilanzgleichung fiihrt zu folgenden Ausdriicken (Patankar):
mit
aE aw
= DeA(IPeI) =
+ m=(-Fe,O)
DwA(IPwI) + m=(-Fw,O)
(5.75) (5.76)
und entsprechenden Ausdriicken fiir die anderen Koeffizienten; weiter ist
=
pop Ax Ay AZ At
b
=
ScAxAyAz+a"p:
up
=
UE
a;
(5.77)
+ uw + + + + U B + UN
US
UT
U$
- SpAxAyAz
(5.78) (5.79)
Die konvektiven und konduktiven Terme sind gegeben durch
(5.80)
usw. P = F/D. Fur die F'unktion A(IP1) wird nach Patankar am besten das Potenz-Gesetz
5.4 FBR rnit radialer Dispersion
A(1P))= max(0, (1 - O.llP1)')
217
(5.83)
gewtihlt. Besonders behutsam sollte man mit den stark nichtlinearen Quelltermen umgehen. Patankar diskutiert sechs Arten der Linearisierung. Gut bewtihrt hat sich insbesondere bei den Arrhenius-Termen die folgende: Der Quellterm S (oder genauer gesagt: sein mittlerer Wert im Bilanzvolumen) wird in einen konstanten Anteil Sc und einen linearen Term SpCpp aufgeteilt, wobei S, nicht positiv sein darf:
s = sc + SpCpp
(5.84)
Wenn im Extremfall der Quellterm die Diskretisierungsgleichung vollstandig dominiert, also Sc + S p Q p = 0 ist, erhtilt man als Lbsung (innerhalb eines Iterationsschritts)
(5.85) Wenn Cp' der augenblickliche Wert ist und ma: den neuen Wert in vorzugebenden Grenzen halten will, z. B. unterhalb von Cpp, wtihlt man
sc
= S'-
sp
=
QP
(5.86)
Cpp - Cp;
--
S'
(5.87)
Cpp - Cp;
Um G1. (5.74) zu losen, kann man nicht unmittelbar den TDMA anwenden, wie in unseren bisherigen, eindimensionalen Beispielen; man kann sie aber nacheinander auf Gitterlinien anwenden (line by lane, nicht zu verwechseln mit der Linienmethode MOL), wie in der Abb. 5.7 angedeutet, wobei man an den benachbarten Gitterpunkten stets die neuesten verfilgbaren Werte einsetzt. Die drei hhufigsten Randbedingungen sind: 1. Der Wert der Zustandsvariablen ist gegeben.
2. Die Diffusionsstromdichte qB am Rand ist gegeben (Diffusion im allgemeinen Sinn, also Diffusion, Dispersion,W%rmeleitungusw.).
3. Die Diffusionsstromdichte am Rand ist ilber einen Austauschterm mit der Umgebung gegeben.
218
5 Festbettreaktor - einphasige Modelle
Aktuelle Gitterlinie X
Abbildung 5.7: Line-by-line-Methode.
Der Fall 1 bietet kein besonderes Problem. Urn fiir die beiden anderen Falle die Randbedingungen einzuarbeiten, integriert man z. B. in x-ftichtung an den Rgndern uber ein halbes Bilanzvolumen der Breite Ax (s. Abb. 5.2). Dann ergibt sich fiir den 2. Fall:
wobei
DiA(IP,()+ max(-Fi,O) b = ScAx+qg ag = a1 - SpAx a1
=
(5.89) (5.90) (5.91)
Hier steht der Index B fur Boundary und I fur den ersten inneren Gitterpunkt. Fiir den 3. Fall, wenn q g = h(q5,, - c $ ~ ) ergibt , sich abweichend von 2.: b ag
+
= S ~ A Xh$,, = aI-SpAx+h
(5.92) (5.93)
Man muf3 darauf achten, q B und h konsistent mit der DG1 zu formulieren! Fur die Reaktorgleichungen am Anfang von Abschnitt 5.4 gilt z. B. an der Rohrwand:
5.4 FBR mit radialer Dispersion
219
(5.94) (mit r := r / R ) und folglich
mit
r h =1 2 d~ Peh,, R R ’
Im Problem 5.5.10 wird die finite Volumenmethode (FVM) auf ein zweidimensionales Model1 des FBR angewendet.
5.4.3
Linienmethode
Bei der Linienmethode (Method Of Lines, MOL) wird eine der unabhthgigen Variablen einer PDGl nicht diskretisiert; so entsteht ein - unter Umstanden sehr groi3es - System gewbhnlicher DGls (oder DAGls). Die heutigen DG1-Loser sind so gut, dai3 diese Methode sich steigender Beliebtheit erfreut. Die eine unabhtingige Variable, die nicht diskretisiert wird, sollte eine ,,Einweg“-Variable sein wie die Zeit, denn sonst wtirde man ein Randwertproblem bekommen. Dann aber bietet die Linienmethode zwei vorteilhafte Mbglichkeiten: Man kann die Steuerung der Schrittweite dem DG1-Lbser fiberlassen, und man braucht nichtlineare Terme nicht zu linearisieren und braucht daher auch nicht zu iterieren. Wie kbnnen wir die Linienmethode in MATLAB oder SIMULINK realisieren? Die Diskretisierung bleibt weiterhin Aufgabe des Anwenders; es bietet sich aus den schon skizzierten Grtinden die FVM an. Als DG1-Lbser verwendet man von vornherein einen ftir steife Systeme, denn die entstehen fast zwangsl a d g bei der Diskretisierung. Sparse Matrizentechniken ftir die groi3en Gleichungssysteme sind in MATLAB einfach anzuwenden, wie wir schon erfahren haben. In SIMULINK sieht die Sache etwas anders aus: Hier kilnnen wir in den Matrix-Gain-Blocken nur volle Matrizen mit konstanten Werten benutzen; bei der Ausfiihrung der Rechenschritte benutzt SIMULINK dann allerdings sparse Techniken, so dai3 hohe Rechengeschwindigkeiten erzielt werden; Speicherplatzprobleme kbnnen wir aber leicht bekommen. Was machen wir, wenn die Parameter der PDGls nicht konstant sind und Matrizen mit nichtkonstanten Elementen auftreten? In MATLAB ist das kein besonderes Problem, wir kbnnen bei jedem Schritt des DG1-Lasers die Matrizen neu berechnen. In SIMULINK miissen wir wieder anders vorgehen: Matrix-Gain-Bltjcke kbnnen wir in solchen Fallen nicht verwenden, wohl aber M A TLAB-Fcn-Blbcke. Wenn die aber die Rechengeschwindigkeit zu stark herabsetzen, konnen wir immer noch auf S-Funktionen ausweichen. Anstatt uns dort nach sparsen Techniken in C umzusehen, ktinnen wir mit Vektoren statt Matrizen arbeiten, da wir j a die einzelnen Elemente sowieso neu berechnen mfissen; in den Abschnitten 2.2 und 2.3 finden Sie Beispiele.
220 5 Festbettreaktor - einphasige Modelle Beispiel: Oxidation von 0-Xylol nach dem zweidimensionalen Model1 eines FBR (MOL) Da die Diskretisierung der Bilanzgleichungen filr die MOL doch ein wenig anders verlguft und man die Formeln von Patankar (Abschnitt 5.4.2) daher nicht unmittelbar anwenden kann, seien hier einige Einzelheiten dargelegt. Wir schreiben die allgemeinen Bilanzgleichung 5.72 noch einmal, diesmal etwas umgestellt und noch weiter gekiirzt:
84 = --(rr-1d dz
(5.96)
rdr
wobei 4 filr x bzw. T steht und wir uns wie bisher I? und S indiziert denken. Wir multiplizieren nun beide Seiten dieser Gleichungen mit T und integrieren dann uber die finiten Bilanzvolumina von r, bis r e ; filr unseren ublichen Fall, 6rw = 6r, = Ar, erhalten wir:
a4
-rpAr dz
=
84 a4 (rr-)e - (rr-)w + SrpAr dr dr
(5.97)
und nach Approximation der Differentialquotienten
oder
mit
rwrw
uw = r pAr Ar
aE
rere
=rpArAr
up
= -(UW
+UE),
b =S
(5.100)
Jetzt mtissen wir noch die Randbedingungen fur die r-Koordinate einarbeiten; am linken Rand ( r = 0) ergibt die Integration liber das halbe Bilanzvolumen von 0 bis 1/2 AT:
5.4 FBR rnit radialer Dispersion
221
Am rechten Rand ( r = 1) erhalt man:
aw ( = UP(
=
T,r,
w r ) =
1 / 2 ( A ~- ( A ~ / 2 ) ( A r / 2 ) ) A r
(5.102)
Bi l?
aNr+l)
b = S+
) (5.103) = -(w+ 1/2(Ar - ( A T / ~ ) ( A T / ~ ) )
Bi I? T,, 1/2(Ar - ( A ~ / 2 ) ( A r / 2 ) )
(5.104)
Die beiden letzten Gleichungen gelten naturlich nur fur die Enthalpiebilanz; bei der StofTbilanz entfallen die Terme mit Bi. Das File MOLDAT zeigt die Codierung dieser Beziehungen: MOLDAT
global c0 cpG delh L Nr p02 rhoG rhokat Tmax Tmin u0 R1 phils global Q1 phi25 k l Nz global Gam Gah x10 TO dz dr BiGah Tu global rdr ASm Ash Luc hLurcp rw=[];re=[];aEms=[];aWms=[];aEm=~;aWm=[];
aEhs=[];aWhs=[];aEh=O;aWh=[l;rb=[;xl=[;T=[]; cpG=l.046; % kJ/ kg/ K delh=-1285400; % kJ/kmol Dmr=0.0003; %m2/s dp=O.O03;%m;Partikeldrm hw=159.1; % W/m2/K, Waermedurchgangskoeffizient an der Rohrwand% L=3.; %m lamr=0.7729; % W/m/K;X,
Nr=100: p0=.015; xentspricht hier dem Partialdruck in bar pL=101325;%Pa; Druck am Reaktorausgang p02=0.211; %bar R=O.O254/2;%m; Rohrradius RG=8314; rhoG=1.293; % kg/m3 rhokat=1300; % kg/m3, Schuettdichte T0=625; %K Tu=625; uO=l;%m/s; Leerrohrgeschwindigkeit x10=.015; cO=pL/RG/273.2; dr=l/Nr;
222 5 Festbettreaktor - einphasige Modelle Pehr=uO*rhoG*cpG*dp/(lamr*le-3); Pemr=uO*dp/Dmr; %Peclet masse radial
Gam=l/Pemr*dp/R*L/R; Gah=l/Pehr*dp/R*L/R; Bi=hw*R/lamr; BiGah=Bi*Gah; Luc=L/u0/c0; Lurcp=L/uO/rhoG/cpG; hLurcp=(-del h)* Lurcp; xl=xlO*ones( Nr+l,l); T=TO*ones( Nr+l,l); rw=dr/2:dr: 1-1.5*dr; re=rw+dr; aEms=Gam*re/dr; aWms=Gam*rw/dr; a Ehs=Ga h*re/dr; aWhs=Gah*rw/dr; rb=dr:dr: 1-dr; rdr=dr*rb; rdr=[1/2*dr/2*dr/2,rdr, 1/2*( l*dr-dr/2*dr/2)] ; aEm=[aWms(l),aEms]; aWm=[aWms,Gam*(l-.5*dr)/dr]; aEh=[aWhs(l),aEhs]; aW h=[aWhs, Ga h* ( 1-.5*d r)/d r] ; aPms=aEms+aWms; a Pm=[a Em(l), a Pms,a Wm (Nr)] ./rdr;
aEm=aEm./rdr(l:Nr); aWm=a Wm ./ rdr( 2: Nr+ 1); D=sparse(l:Nr+l,l:Nr+l,-aPm);
W=sparse(2:Nr+l,l:Nr,aWm,Nr+l,Nr+l,Nr); E=sparse( 1:Nr,2: Nr+l,aEm, Nr+l, Nr+l, Nr); ASm=W+D+E; aPhs=aEhs+aWhs; aPh=[aEh( l),aPhs,aWh(Nr)+BiGah]./rdr; aEh=aEh./rdr( 1:Nr); aW h=a Wh ./rdr( 2: Nr+ 1); D=sparse( 1:Nr+1, 1:Nr+l,-aP h); W=sparse(2:Nr+l,l:Nr,aWh,Nr+l,Nr+l,Nr); E=sparse( l:Nr,2:Nr+l,aEh,Nr+l,Nr+l,Nr); ASh=W+D+E;
5.4 FBR mit radialer Dispersion
223
Das U P fiir den DG1-User ist im folgenden File MOLKIN dargestellt: MOLKIX
function dy = molkin(z,y)
% Bilanzgln fuer das o-Xylol-Beispiel. Zweidimensionaler, % einphasiger, nichtisothermer FBR. Zu verwenden mit % moldat. global c0 cpG delh L Nr p02 rhoG rhokat Tmax Tmin u0 R1 phils global Q1 phi2s k l Nz global Gam Gah x10 TO dz dr BiGah Tu global rdr ASm Ash Luc hLurcp xl=y( l:Nr+l); T=y(Nr+2:2*(Nr+l));
kl=l.l44e+05*exp(-13636./T);% Geschw.-Konstante, kmol/kg/s/bar^2 %kl=O; rl=kl*rhokat*po2.*xl; R1=-rl*Luc; Ql=rl*hLurcp;Ql( Nr+l)=Ql( Nr+l)+BiGah*Tu/rdr( Nr+l); dxl=ASm*xl+Rl; dT=ASh*T+Ql; dy=[dxl;dT]; Mit odel5s Iassen sich nun durch den iiblichen Aufruf die Konzentrationsund Temperaturfelder berechnen: moldat [z,y]=odel5s('molkin',[O l],[xl;T]);
Es erscheint ratsam, die Toleranzen RelTol und Abs To1 etwas zu verschhrfen. Auch in SIMULINK Itii3t sich das Gleichungssystem sehr schbn behandeln (MOLSIM.MDL): Die tridiagonalen Matrizen enthalten nur konstante Werte, so dai3 man die Matrix-Gain-Blbcke verwenden kann. Die Quellterme kann man abtrennen und in einem eigenen Block berechnen, am einfachsten in einem MATLAB-Fcn-Block (MOLKINSIM); da dieser keine im MATLAB-Compiler verbotenen Anweisungen enthhlt, kann man den Geschwindigkeitsverlust erheblich reduzieren, und wenn das nicht reicht, immer noch auf eine S-Funktion zuriickgreifen (entweder selbst geschrieben oder mit der Compiler Toolbox ab Version 1.2 ). MOLKINSIM
function RQ = molkinsim(y) % Quellterme fuer das o-Xylol-Beispiel. Zweidimensionaler, % einphasiger, nichtisothermer FBR. Zu verwenden mit % moldat und molsim (Matlab Fcn). global c0 cpG delh L Nr p02 rhoG rhokat Tmax Tmin u0 R 1 phils
224 5 Festbettreaktor - einphasige Modelle global Q1 phi2s k l Nz global Gam Gah x10 TO dz dr BiGah Tu global rdr ASm Ash Luc hLurcp xl=y( l:Nr+l); T=y(Nr+2:2*(Nr+l));
kl=l.l44e+O5*exp(-13636./T); % Geschw.-Konstante, kmol/kg/s/barA2 %kl=0; r 1=k l* rhokat *po2. * x l ; R1=-rl*Luc; Ql=rl*hLurcp;Ql( Nr+l)=Ql( Nr+l)+BiGah*Tu/rdr( Nr+l); RQ=[Rl;Ql]; 5.4.4
Orthogonale Kollokation
Die vielen Gleichungen, die bei der Diskretisierung nach der FVM oder anderer Methoden niedriger Ordnung auftreten konnen, insbesondere bei mehrdimensionalen Problemen, lassen uns nach Methoden Ausschau halten, die vielleicht mit deutlich weniger Stiitzpunkten auskommen. Wir werden im Bereich der MWR fiindig, bei den Methoden der gewichteten Residuen (MWR, Method of
Weighted Residues). Die Methode der orthogonalen Kollokation, ein Spezialfall der allgemeinen Kollokationsmethoden innerhalb der MWR, hat sich in der Reaktionstechnik als besonders geeignet erwiesen; sie kommt mit den oft stark nichtlinearen Gleichungen, insbesondere mit den Arrheniustermen, gut zurecht, ebenso mit den haufig zu findenden Randwertbedingungen l., 2. und 3. Art, ihre Ordnung lafit sich leicht variieren, und eine besondere Vereinfachung ist, d d die Lasungen nicht in Form unanschaulicher Koeffizienten von Potenzreihen auftreten, sondern als Funktionen der Lbsungen an den Kollokationspunkten. Wir werden auch hier nicht tiefer in den mathematischen Hintergrund vordringen (s. z. B. Finlayson[20], dem wir auch bei der folgenden Darstellung der Methode folgen), sondern uns mit der Anwendung begniigen. Zuvor aber noch ein Wort zur Bezeichnung ,,orthogonal". ,,Orthogonale Kollokation '' ist eigentlich ein Kiirzel; etwas lgnger, dafiir aber aufschluheicher, ist die Bezeichnung ,,Kollokation rnit orthogonalen Polynomen ", die also die Rolle der Naherungsfunktionen iibernehmen. Es steckt mehr dahinter als nur eine systematische Art, ilber ihre Nullstellen die Stiitzstellen festzulegen: Vor allem liefern die orthogonalen Polynome optimale Quadraturformeln, also in gewissem Sinne die genauesten Niiherungen fiir Integrale iiber den fraglichen Bereich. Das ist auch in der Reaktionstechnik wichtig, man denke nur an den iiber den Radius gemittelten Umsatz im Stromungsrohr oder - vielleicht noch bedeutsamer - an den Nutzungsgrad von Katalysatorpartikeln. Welche Naherungsfunktion man wahlt, hangt von der Modellgleichung ab. Wir beschranken uns hier auf Probleme, bei denen die Losung fiir den Bereich 0 5 2 5 1 gesucht ist und symmetrisch um 2 = 0 liegen sol1 - das ist der Fall bei dem FBR mit radialer Dispersion; eine mbgliche Naherungsfunktion fiir die iiblichen Geometrien Platte, Zylinder und Kugel ist
5.4 FBR mit radialer Dispersion
225
(5.105) Die Polynome Pi sind gegeben durch
wobei b = 0, 1 , 2 filr die genannten Geometrien ist. Dieser Naherungsansatz erzeugt eine Lbsung, die symmetrisch zu x = 0 ist und damit die Randbedingung = 0 erfiillt, und die filr x = 1 die Anpassung an die dortige Randbedingung erlaubt. Wir k6nnen den Nhherungsansatz, dieses Polynom in x2,vereinfacht schreiben als
(5.107) An den Kollokationspunkten SOU diese Funktion die PDGl genau erfiillen, also ohne Rest, ohne Residuum - das ist das Wesen der Kollokationsmethoden; aus dieser Forderung lassen sich die Koeffizienten di bestimmen, wenn man die Naherungsfunktion in die PDGl einsetzt. Wir mbchten aber, wie oben schon angedeutet, die Lbsung nicht durch die Koeffizienten di angeben, sondern durch die Werte der abhlngigen Variablen y an den N inneren Kollokationspunkten xj und dem Randpunkt 1. Wir nehmen dazu die vorige Gleichung an diesen Stellen und schreiben sie zunlchst in Matrixform: Y = Q ~
(5.108)
~3"'.
( Q ist also hier eine ((N+1), (N+l))-Matrix, wobei Yj = ~ ( x j ) , Q j i = das sei noch einmal hervorgehoben.) Die ersten und zweiten Ableitungen von y nach x an den Kollokationsstellen xj lassen sich nun leicht angeben: yx = Cd = CQ-'y = Ay
mit (yx)j = ( % ) 5 j ,
Cji =
(5.109)
dx2'-2
(T)xj = (22 - 2 ) q 3 , und
yxx = Dd = DQ-'y = By
(5.110)
226 5 Festbettreaktor - einphasige Modelle
N+l
"1
(5.111) lassen sich exakt berechnen fur Funktionen f, die Polynome vom Grad 2N in x2 sind, vorausgesetzt, die inneren Kollokationspunkte sind die Wurzeln der Polynome PN(x')mit w = 1 - x2 in G1. (5.106):
(5.112) also
WQ
=f,
W = fQ-'
(5.113)
Die Berechnung der Nullstellen der Polynome sowie der Matrizen A, B und W ist mit MATLAB elegant durchzufiihren, wie auf der Hand liegt. Die benotigten Polynome finden wir in der Extended Symbolic Math Toolbox (Problem 5.5.12); wer die nicht besitzt und auch keinen Zugang zu MAPLE, MATHEMATICA oder entsprechenden symbolischen Programmen hat, findet die Nullstellen in Finlayson [20] oder bei Stroud und Secrest [21] oder - die filr das FBR-Problem - in dem Datenfile JACOBI-NULL.MAT. Mit dem Vektor der Nullstellen, also den inneren Kollokationspunkten, kann man die Matrizen A, B, Q und W berechnen (Problem 5.5.13).
5.5 5.5.1
Probleme und Losungen Aufstellen der Stofbilanzen fur die katalytische Methanisierung im isothermen FBR (*)
Die Methanisierung von Synthesegas sei kinetisch durch die folgenden drei Reaktionen beschrieben:
cO+3H2 C02 4H2 CO+H20
+
CH4+H20, r1 = r l ( x ) CH4 2H20, 7-2 = r2(x) 2 C02+H2, ~3 = r 3 ( x )
--t
-+
+
(5.114) (5.115) (5.116)
Es sol1 die hinreichende Anzahl von Stofiilanzen formuliert werden (fiir das einfachste Model1 eines FBR) , aus denen sich die Konzentrationsprofile aller Komponenten berechnen lassen.
5.5 Problerne und Ldsungen
227
Losungsvorschlag Wir kbnnen das File STOICH4 verwenden (s. a. Abschnitt 3.4.2); Schliisselkomponenten seien CO und CH4: s=str2mat( 'CO', 'CH4','H2', ' H20','C02'); NR=[-1 -1 Oil 0 1;-31 -4;l-1 2;O 1-11; stoich4
CO + 3 H2 <==> CH4 + H20 CO + H20 <==> H2 + C02 4 H2 + C02 <==> CH4 + 2 H20 Stoechiometrische Gleichungen H2 + C02 = CO + H20 4 H2 + C02 = CH4 + 2 H20
NS NS = 1 0 0 1 -1 -4
1 2 -1 -1 Wir benotigen noch die Matrizen (bzw. Vektoren) sT, N N - s , ~NS,R , und S :;
NS); N=5;S=2; N N -SS=NS( N-S:N ,:) NSR=NR( l:S,:) sRT=surn( NR)
sT=surn(
Damit haben wir alle stbchiometrischen Parameter fiir die drei Gleichungen (5.18) bis (5.20) zusammen.
5.5.2
Gleichgewichtsberechnungen durch Losen von Reaktorgleichungen bei groi3er Verweilzeit (*)
Die Berechnung von Simultangleichgewichten,so wie sie im Problem 3.4.8 nach einer iiblichen Methode durchgefiihrt wurde, erfordert die Lbsung eines nichtlinearen Gleichungssystems; das kann besonders bei hoheren Dimensionen Schwierigkeiten bereiten. Eine bedenkenswerte Alternative ist, Gleichgewichte so zu
228
5 Festbettreaktor - einphasige Modelle
berechnen, wie sie sich in einem Reaktor bei gentigend langer Verweilzeit einstellen: Man geht von einem Komponentengemisch aus und berechnet die Endzusammensetzung in einem geeigneten Reaktor mit Hilfe einer Massenwirkungskinetik; das fiihrt z. B. im BR oder im (idealen) FBR auf ein DG1-System. Am Beispiel der katalytischen Dampfspaltung von Methan zu Synthesegas sei diese Methode erprobt; die Bedingungen kbnnen aus dem Problem 3.4.7 iibernommen werden, die Daten zur Gleichgewichtsberechnung aus SYNGA-GL. Losungsvorschlag Im Prinzip kbnnen wir uns orientieren an den Programmen, die im SIMULINKModel1 EXPUNIT:! (Abschnitt 3.1.3) zur Berechnung des Reaktors benutzt worden sind; allerdings erschweren Fehlergeneratoren und einige andere Besonderheiten dort etwas die Ubersichtlichkeit. Wir schreiben deshalb besser ein neues Treiberprogramm fiir die beiden UPS SYSGAODE und S Y N G A K I N , diese beiden konnen wir iibernehmen und sehen sie uns deshalb im Ausdruck an: SYNGAODE
function dx = syngaode(t,x) global uOc0 xOs xOne NS NR nk ns T nues nuer
uc=uOcO*( l-nues'*xOs)/( I-nues'*x); xne=( uOcO*xOne+NS( ns+l:nk,:)*( uc*x-uOcO*xOs))/uc; rate=synga kin( [x;xne]); dx=(NR( l:ns,:)-x*nuer')*rate/uc;
Die beiden ersten ausftihrbaren Anweisungen berechnen die Gesamtstromdichte und die Molanteile der Nichtschlilsselkomponenten, so wie es im Abschnitt 5.1 beschrieben und im vorhergehenden Problem bereits angewendet wurde; nues entspricht also sT, nk bezeichnet ausnahmsweise statt nc die Anzahl der Komponenten. (Als Schltisselkomponenten wurden CH4 und C02 gew%hlt, als Nicht-Schhsselkomponenten H20, CO und H2; in dieser Reihenfolge ist beziffert.) Dann folgt der Aufruf des Programms S Y N G A K I N , das die Massenwirkungskinetik fiir die beiden Reaktionen bereitstellt, die den stbchiometrischen Gleichungen entsprechen: SYNGAKIN
function rate = syngakin(x) global T p Kx k10=0.5e-O3*exp( 15800/8.314/(850+273.16))*p; kl=k10*exp(-15800/8.314/T); k2=5*kl; KCH4=1;KH20=.5;KCO=.3; r( l)=kl*p*(x( 1)-Kx( 1)*~(4)*x(5) 3 / ~ ( 3 ) ) ; r( l)=r( 1)/(1+KCH4*p*x( l)+KH2O*p*x(3)+KCO*p*x(4)); r(2)=k2*p*(x(4)-1/Kx(2)*~(2)*~(5)/~(3)); r(2)=r(2)/( l+KCH4*p*x( l)+KH2O*p*x(3)+KCO*p*x(4));
5.5 Probleme und Ldsungen
229
rate=r' ;
Die Massenwirkungskinetik ist in den Zahlern enthalten; die Nenner k6nnten auch weggelassen werden, sie machen die Kinetik im Hinblick auf endliche Verweilzeiten etwas realistischer fur den Einsatz in EXPUNIT2. Das Treiberprogramm md3 im wesentlichen die Gleichgewichtskonstanten bereitstellen; Vorlage kunnte SYNGA-GL aus Kap. 3 sein: SYNGA-
GL-KIN
function xnass = synga-GI-kin(u) %u enthalt NY, N,", Ternperatur T (in "C), Druck p, Schiitthohe L %m-file fuer syngas-Gleichgewicht
% Berechnet die Ausgangskonzentrationen bei der kat. Dampf% spaitung. lsothermer Reaktor. global uOc0 xOs xOne NS NR nk ns T nues nuer global T p Kx % ne number of elements = nk - ns % nk number of components % ns number of stoichiornetric eqs % Flr Flaeche Reaktor %String fuer stoechiornetrische Matrix: %Sp=['H20 CO H2 CH4 CO2']; %Numerierung CH4 C02 H 2 0 CO H2 if u(3) < 600 error('Temperatur zu tief (sol1 > 600 "C)') else
%Stbchiometrie nk=5;ns=2; NS=[1 0;O 1;l -1;-1-1;-3 13; NR=[-l 0;O1;-1-1;l-1;3 11; nues=[-2;O];nuer=-nues; %Gleichgewicht, siehe auch Abschnitt 3.2 und 3.4.8 mit synga-Gl% CPVAP( 1,1:4)=[ 1.925E+1 5.213E-2 1.197E-5 -1.132E-83 ; DELHF(1) = -7.490E+4; DELGF(1) = -5.087E+4; CPVAP(2,1:4)=[ 1.980E+ 17.344E-2 -5.602E-5 1.715E-81; DELHF(2) = -3.938E+5; DELGF(2) = -3.946E+5; CPVAP(3,1:4) = [ 3.224E+1 1.924E-3 1.055E-5 -3.596E-93; DELHF(3)= -2.420E+5; DELGF(3)= -2.288E+5; CPVAP(4,1:4)=[ 3.087E+1 -1.285E-2 2.789E-5 -1.272E-83; D E LHF(4) = - 1.106E+5 ; DELGF(4)= -1.374E+5; CPVAP(5,1:4)=( 2.714E+l 9.274E-3 -1.381E-5 7.645E-9 1; DELHF(5)=O.O; DELGF(5)= 0.0;
230 5 Festbettreaktor - einphasige Modelle TB=~~~.~~;TB~=TB*TB;TB~=TTB~*TB;TB~=TB~*TB; dela =NS' * C PVAP( :,1) ;del b= NS' * C PVAP( :,2) ; delc=NS'*CPVAP( :,3);deld=NS'*CPVAP(:,4); delh298=NS'*DELHF'; delg298=NS'*DELGF'; del hO=del h298-dela*TB-.5*delb*TB2.. . -1/3*delc*TB3-.25*deId*TB4; I=(delg298-del hO+dela*TB*log(TB)+O.5*del b*TB2.. . +1/6*delc*TB3+1/12*deld*TB4)/TB;
T=U(~}+~~~.I~;T~=T*T;T~=T~*T;T~=T~*T; delg=del hO-dela*T*log(T)-. 5*del b*T2.. . -1/6*delc*T3-1/12*deId*T4+1*T; RG=8.314; p=u(4); Ka=exp(-delg/RG/T); Kx=Ka.*(p*ones( ns, 1)).^(-nues); %Eingangs-Stromdichte uOcO=sum(u( 1:2));%/FIr; %Eingangs-Molanteile xOs=[u( l)/sum( u( 1:2));0]; xOne=[u( 2)/sum( u( 1:2));O;O]; xo=xos; L=u( 5); [t,xt]=odel5s( 'syngaode', [0,L] ,xO); %Berechnung der Ausgangszusammensetzung [ze,ko]=size(xt); x=xt(ze,:); x=x ; uc=uOcO*( I-nues'*xOs)/( 1-nues'*x); xne=( uOcO*xOne+NS( ns+l:n k,:)*( uc*x-uOcO*xOs))/uc;
xnass=[x;xne]; end
Wir kisnnen jetzt mit folgender Argumentenliste aufrufen: xnass=synga-GI-
kin( [2/22400* le-03;4*2/22400*le-03;850;10;3])
xnass =
4.6557e-003 5.5374e-002 3.8184e-001 8.4158e-002 4.7397e-001 1st das Gleichgewicht erreicht? Das kbnnen wir durch Vergleich mit K, uberprufen:
5.5 Probleme und Losungen
231
global NS prod(xnass. NS( :,l)) ans =
1.9839e-001 prod(xnass. ^NS(:,2))
ans = 8.1672e-001 global Kx Kx
Kx = 1.9840e-001 8.1672e-001 Also genau genug!
5.5.3
Oxidation von 0-Xylol im idealen FBR (*)
For die folgenden Reaktionsbedingungen sollen die axialen Profile der Temperatur und der Konzentration von 0-Xylol im eindimensionalen, einphasigen idealen
FBR berechnet werden: py = 0.01, 0.0125, 0.015, 0.016, 0.017, 0.0175, 0.0178, 0.018, 0.019 bar (Eingangs-Partialdruck von 0-Xylol)
k = 1.144e5exp(-13636/T) kmol/kg(Kat) s bar2 Gesamtdruck p = 1 bar 02-Partialdruck p! = 0.211 bar Eingangstemperatur To = 625 K Umgebungstemperatur T" = 625 K Schuttdichte des Katalysators pKat = 1300 kg/m3 Molwarme Gas C, = 30.8 kJ/kmol K Reaktionsenthalpie A H = - 1.285e6 kJ/kmol Warmedurchgangskoeffizient h = 96.2 W/m2 K Rohrdurchmesser dt = 0.0254 m Schiittlange L = 3 m Querschnittsbelastung u p = 1.293 kg/m2 s
Losungsvorschlag Wir stellen alle Werte in einem Datenfile zusammen und berechnen dort auch die Parameter der dimensionslos gemachten Stoff- und Enthalpiebilanzen: FBRDAT
global p02 rhokat Luc hLurcp StL4dt Tu % Daten fuer das 0-Xylol-Beispiel. Eindimensionaler, % einphasiger, nichtisothermer FBR. Zu verwenden mit % fbrkin(x1,T)
L=3;
%rn
232 5 Festbettreaktor
-
einphasige Modelle
dt=0.0254; R=O.O254/2;%m;Rohrradius
pL=101325;%Pa; Ausgangsdruck p02=0.211; %bar RG=83 14; T0=625; %K TU=625 ; Tmax=1000;Trnin=300; cO=pL/RG/273.2; uO=l;%rn/s; Stromunggeschwindigkeit am Eingang p0=.015; xentspricht hier dem Partialdruck in bar x10=.015;%Eingangs-Molenbruch von Xylol rhokat =1300; % kg/m3, Sc huettdic ht e rhoG=1.293; % kg/m3 cpG=1.046; % kJ/kg/K delh=-1285400; % kJ/kmol h=96.2; % W/m2 K St= h/uO/rhoG/cpG*le-03; StL4dt=St*L*4/dt; Luc=L/u0/c0; turcp=L/uO/rhoG/cpG; hLurcp=(-del h)*Lurcp;
Dann schreiben wir das U P far den DG1-Loser: FBRKIN
function dx = fbrkin(z,x) YO Bilanzgln fuer das o-Xylol-Beispiel. Eindimensionaler, % einphasiger, nichtisotherrner FBR. Zu verwenden mit % fbrdat. global p02 rhokat Luc hLurcp StL4dt Tu % St=h/uO/rhoG/cpG*le-03; % StL4dt=St*L*4/dt; % Luc=L/u0/c0; % Lurcp=L/uO/rhoG/cpG; % hLurcp=(-delh)*Lurcp; xll=x( l);TI=x(2); kl=l.l44e+05*exp(-l3636/Tl); % Geschw.-Konstante, krnol/kg/s/bar^2 rl=kl*rhokat*po2*xll; R1=-rl*Luc; Ql=rl*hLurcp; QlStZQ1-St L4dt*( TI-Tu); dx=[Rl;QlSt];
Die nlchsten Anweisungen starten die Rechnung und geben die Ergebnisse grafisch aus:
5.5 Probleme und Ltlsungen 233
fbrdat x10=0.015; % Standardwert in fbrdat [z,x]=ode45('fbrkin',[O,11,[xlO;TO]); subplot(1,2,1) plot(z,x(:2)) subplot(l,2,2) plot(z,x(:J ) )
0.0040
0.5 z/L
Abbildung 5.8: T- und s-Verlauf von 0-Xylol im FBR.
Das Durchrechnen der anderen Eingangskonzentrationen zeigt ab einem bestimmten Wert deutlich eine parametrische Empfindlichkeit.
5.5.4
Radiale Temperaturprofile im FBR in parabolischer Niiherung (*)
Fiir das Beispiel der eXylol-Oxidation in Problem 5.5.3 sollen die radialen TProfile in parabolischer Nlherung berechnet werden; zur Demonstration geniigt es, das axiale 2'-Profil in der Rohrmitte mit dem an der Stelle T = T* zu vergleichen. Fiir die effektive radiale Warmeleitfahigkeit A, kann bei den Reaktionsbedingungen ein Wert von 0.77 W/(m K) angesetzt werden; T, sei gleich TU.
Losungsvorschlag Wir miissen zuerst Problem 5.5.3 bearbeiten und das erhaltene T-Profil auf T = r* beziehen. Dann ktinnen wir aus dem Warmedurchgangskoeffizienten
234 5 Festbettreaktor - einphasige Modelle h und aus A, zungchst den Wiirmeltbergangskoeffizienten a n der Wand, a,, und dann die Biot-Zahl Bi berechnen; G1. (5.34) liefert dann das gewiinschte T-Profil in der Rohrachse. h=96e-O3;lam bdar=0.77e-03; alphaw=h*( l-dt/2/lambdar*h); Bi=alphaw*dt/2/lambdar; Trstar=x(:,2); %x(:,2) aus P 5.5.3 TrO=Trstar+(Trstar-Tu)/( 1+4/Bi); plot(z,x( :,2),z,TrO)
I Abbildung 5.9: Temperaturprofile im o-Xylol-Beispiel. - T = 0, - -
T
= T*
Am hot spot betriigt der Unterschied immerhin ca. 8 K ; es ist fraglich, ob man sich mit dem eindimensionalen Temperaturprofil begniigen sollte.
5.5.5
SIMULINK-Model1 fur den FBR mit beliebigen Reaktionen (***, nicht SE)
Die allgemeinen Bilanzgleichungen filr den idealen FBR sollen so programmiert werden, dai? sie ftir beliebige Reaktionen benutzt werden k6nnen. Das ist eine Aufgabe, die man auf sehr viele verschiedene Weisen angehen kann. Zungchst muB man entscheiden, ob sich der Aufwand ilberhaupt lohnt. Allgemein einsetzbare Programme werden leicht umstgndlich: Sie benbtigen vielleicht viele Schalter, oder rechnen auch einfache Fiille mit den geballten allgemeinen Beziehungen, wo stark vereinfachte, zugeschnittene Programme geniigen wilrden - sie lassen sich kurz gesagt hiiufig nur schwerfdlig bedienen.
5.5 Probleme und Lasungen
235
Wir werden schnell sehen, vor wieviele Entscheidungen wir gestellt werden, die oft gar nicht einfach zu treffen sind. Losungsvorschlag Die erste Entscheidung ftihrt uns zu Standardfragen dieses Buches: MATLABoder SIMULINK-Programm, und wenn SIMULINK, dann mit C MEX-file Sfunctions oder so weit wie mbglich ohne? Oder mit der Kurzfassung dieser F'ragen: schnell oder bequem? Wir entscheiden uns hier f t h schnell, aus verschiedenen Griinden, z. B.: 0
der Ubungseffekt , ein etwas grbfleres SIMULINK-Blockschaltbild zu entwerfen und dabei Matrizentechniken in SIMULINK anzuwenden
0
Schnelligkeit fiir grbi3ere Reaktionssysteme oder komplizierte Kinetik
0
Schnelligkeit fiir Optimierungen, ein besonders schwerwiegender Grund
0
die bequeme OnlineVisualisierung.
Die Gleichungen, die wir codieren miissen, sind die Bilanzgleichungen zusammen mit den stbchiometrischen Berechnungen; die Bilanzgleichungen machen wir dimensionslos und fassen auch einige Parameter zu dimensionslosen Gruppen zusammen. Stoffbilanz: (5.117) Dazu kommen die stochiometrischen Beziehungen Gln. (5.18) und (5.19), aus denen sich die Gesamt-Molstromdichte uc und die Molanteile XN-S der NichtSchliisselkomponenten ergeben. Enthalpiebilanz:
(5,118) Sollen wir im Programm einen Schalter einfiigen, um Reaktionen ohne Molzahltinderungen getrennt rechnen zu kbnnen, oder nehmen wir in Kauf, in solchen Fallen bei jedem Integrationsschritt ein uc zu berechnen, das sich gar nicht tindert? Sollen wir einen Schalter einfiigen, um zwischen konstanter und nicht konstanter spezifischer Warme wiihlen zu kbnnen? Was ist, wenn wir den Druckabfall nicht vernachlasigen kbnnen? Die Ra ge nach dem Druckabfall ist besonders heikel: Das Ubliche Vorgehen, den Druckabfall ilber die Ergun-Formel (oder eine andere einschlggige) integral abzuschatzen, erfordert, einen festen Wert f t h die veranderliche Gasdichte
236 5 Festbettreaktor - einphasige Modelle anzunehmen - den am Ausgang, den am Eingang des Reaktors, welcher von beiden vorgegeben ist, oder iterativ das arithmetische Mittel zwischen diesen beiden? Bei groBeren Druckverlusten ist das aber kaum zu vertreten; dann sollte man mit einer differentiellen Druckverlust-Gleichung, also mit einer zusatzlichen DG1 rechnen. Allerdings: Wenn der Druck am Reaktorausgang vorgegeben ist, handelt man sich auf diese Weise ein Randwertproblem ein, und das ganze Losungsverfahren wird um einige Grade schwieriger. Die kinetischen Gleichungen wird man von Fall zu Fall in einem eigenen U P codieren. So entsteht der Vorschlag eines gar nicht besonders komplizierten SIMULINK-Modells, das in Abb. 5.10 wiedergegeben ist:
Visualisierung Archivierung d(xS,T)/d(z/L)
Nichtisothermer idealer PFR Datenfile: pfral1gdat.m
Abbildung 5.10: SIMULINK-Modell.
Ein Blick in die Subsysteme im SIMULINK-Model1PFRALLG.MDL zeigt, wie man die SIMULINK-Blocke mat^ Gain, Dot Product oder Product fiir VektorMatrix-Operationen einsetzen kann; langere Ausdriicke, wie hier die kinetischen, sind wieder a m besten in Fcn-Blljcken aufgehoben. Die F'ragen, wie wir mit u c , cp und dem Druckverlust umgehen sollen, ist filr uc im ersten Subsystem nach dem Integrator gezeigt: Die Lbsung bringt ein Enabled-Block, der entweder uc berechnet oder seinen Anfangswert uoco ausgibt. Entsprechend kljnnte man auch mit cp verfahren; darauf wurde hier verzichtet. Das Problem rnit der Berechnung eines Druckprofils, wenn der Ausgangsdruck am Reaktor gegeben ist, l a t sich durch Iteration losen: Man ersetzt den Konstantenblock PO durch eine Schaltung, die die differentielle Druckverlustgleichung lbst, und startet das SIMULINK-Modell mehrmals rnit verschiedenen Eingangsdrikken, bis man den vorgegebenen Ausgangsdruck getroffen hat; dieses sog. SchuBverfahren ist eine haufig gewahlte Methode, um Randwert-DGls
5.5 Probleme und Ldsungen
237
zu lbsen; mehr dariiber im Abschnitt 5.2.2. Wenn die Anspriiche geringer sind, setzt man die Druckverlustgleichung integral an und lbst sie mit konstanter Dichte bzw. konstantem Druck, htrufig mit dem arithmetischen Mittelwert zwischen Ein- und Ausgang - allerdings kennt man einen der beiden Werte nicht immer von vornherein und m d sich dann mit dem vorgegebenen Wert begniigen, was nicht zur Genauigkeit beitrtigt; auch hier kann man allerdings iterieren. Die Wahl zwischen den genannten drei Mbglichkeiten - konstanter Druck, linearer Druckabfall und differentieller Druckabfall - ist im Subsystem ,,Druck'' mbglich iiber eine Kombination von Enabled- und Multaport Switch-Blbcken. In der differentiellen Druckverlustgleichung kbnnte man auch noch die Temperaturabhangigkeit der Viskositat bertkksichtigen. Allerdings kann man davon ausgehen, daO sie bei Gasen nicht sehr ausgepragt ist, daf3 der Temperaturbereich in einem nichtisothermen Festbettreaktor i. a. nicht sehr grof3 ist und daf3 die Ergun-Gleichung halbempirisch ist , also keine zu hohe Genauigkeit fordern kann. Es bleibt noch zu erwtrhnen: Zur Erinnerung fiir den Benutzer gibt eine callback routine SETTEST beim Starten die Meldung ,,Parameter speichern!!! " im MATLAB-Fenster aus. Ein Rechenlauf mit den in PFRALLGDAT eingestellten Parametern zeigt, d d der Druckabfall keineswegs zu vernachltissigen ist , nicht linear ist und mit Recht differentiell angesetzt wurde (Schalter switch-dpdz auf 1, switch-port auf 3). Ganz genau wird der Druck p~ am Reaktorende noch nicht getroffen; der Anfangsdruck po m a t e also noch iteriert werden. P F R A L L G D AT
Rea ktor**** ** ** **** **** **** ** **** ** ** ** dp=0.003; %m Partikeldrm dt=0.0254; %m Rohrdrm h=96.2; % W/m2 K Waermedurchgangskoeffizient L=3; %m Schuettlaenge rhokat=1300; % kg/m3, Schuettdichte epsi=0.4;
Oo/
........................................ %Reaktion ..............................
cpG=1.046; % kJ/kg/K delh=-1285400; % kJ/kmol E=113369704; k10=1.144e+05; N=2; %Anzahl der Komponenten R = l ; %Anzahl der Reaktionen RG=8314; S=l; %Anzahl der stoechiometrischen Gleichungen rhoG=1.293; % kg/m3 etaG=33e-06; %kg/m s MW=29;
..................................
238 5 Festbettreaktor - einphasige Modelle %Bet riebsbedi ngungen************* p0=101325; pL=101325; %p02=0.211; %bar x02=0.2 11; T0=625; %K Tu=625; uO=l; xO=[ .015;0];
**
Q/o********************************* pO=1.6*pL;
..................................
%Zusarnrnengesetzte Parameter******* cO=pL/RG/273.2; EdR= E/ RG; EdR= 13636; %kJ/ krnol klOs=klO*rhokat*xo2; Luc=L/ uo/co; Lurcp=L/uO/rhoG/cpG; St=h/uO/rhoG/cpG*le-03; StL4dt=St*L*4/dt; uoco=uo*co;
s=str2rnat( 'A','B'); N R=[-1; 11; stoich4 sT=surn( NS);s=sT'; sRT=su rn(N R); NN-SS=NS(S+l:N,:); NSR=NR( l:S,:); uocoxso=uo*co*xo(
1:s);
~OcOl_sTxSO=uO*cO*( l-sT*xO( 1:s)); uOcOxN SO=uO*cO*xO(S+l:N);
/o .................................
0
O/oSchalter**************************
switch-uc=-1; switch_port=3; % switch-delp=-1; % switch-dpdz=l; pset=(pO+pL)/2; % oder pL, welcher vorgegeben ist, oder Mittel us=( uO*cO/pset*RG*TO); delp=150*etaG*us/dp^2*( 1-epsi) -2; delp=delpt1.75*u0*c0*MW*us/dpY( 1-epsi);
delp=-delp*L/epsi -3; del prel=del p/ p0;
...................................
5.5 Probleme und Lasungen
5.5.6
239
EinfluB axialer Dispersion (**)
Bei welchen Reaktionsbedingungen machen sich beim o-Xylol-Beispiel (Problem 5.5.3 mit Datenfile FBRDAT) axiale Dispersionsprozesse bemerkbar? Zur Vereinfachung sei nur der isotherme Fall betrachtet. Es konnen folgende Teilaufgaben bearbeitet werden: a) Abschatzung fiber Kriterien b) Abschtitzung iiber Lirsung der Bilanzgleichung ohne axiale Dispersion c) L6sung mit der Schu5methode d) Losung mit der FVM e) Losung mit der Mehrzielmethode f ) Analytische L6sung zum Vergleich. Losungsvorschlag a) Nach den Daten in FBRDAT ist Bo = 2000, also kein Einflu5 der axialen Dispersion zu erwarten, solange uber die gesamte Lange nennenswerte Konzentrationen vorliegen. Erst bei Bo < ca.100 ist mit merklichem Einflu5 zu rechnen. Die Temperatur und in Folge die Reaktionsgeschwindigkeit milssen also so hoch sein, daB das Konzentrationsprofil iiber eine Lange von mindestens L/20 = 0.15 m auf praktisch Null abfiillt. b) Zur Abschatzung rechnet man die Konzentrationsprofile bei verschiedenen Temperaturen zunachst ohne axiale Dispersion aus (XYLISO). c) Man wandelt die PDGl 2. Ordnung in zwei PDGls 1. Ordnung um, lost also - fur eine geeignete Temperatur nach a) und b) - das Gleichungssystem dXl =
(5.119) (21 +RYx2)Bo dz dx2 = 21 (5.120) dz mit RY = -m L k l p K a t p o z nach dem Schuherfahren. Man integriert (,,schie5t") von z = 1 ( L = 0.15 m) nach z = 0, da die Integration in anderer Richtung notorisch instabil ist, selbst mit exakten Randbedingungen (bitte ausprobieren!). Bei z = 1 ist rl = 0; der Wert von 2 2 dort wird so bestimmt, daO die Randbedingung bei z = 0 erfullt ist: z=o:
r;-22+-= 2 10 Bo
(5.121)
Die linke Seite der Gleichung ist eine Funktion von 2 2 an der Stelle z = 1, deren Nullstelle gefunden .werden soll. In MATLAB kann das die Routine fzero besorgen (IRAXZERO mit dem UP IRAXOFUN). IRAXZERO
% Loest das Zweipunkt-Randwert-Problem des isothermen IR mit AXialer % Dispersion durch Suche der Nullstelle der Anfangs-Randbedingung
240 5 Festbettreaktor - einphasige Modelle
% mit dem Matlab-Programm fZERO. UP fuer fzero ist irax0fun; die % erforderlichen Daten sind in iraxdat0. xa=fzero( 'iraxOfun' ,0); [LX] =ode45( 'iraxkin', [O 1 1,[O;xa]); [m,n]=size(x); zi=O:l/(m-1): 1; xi=interpl(z,x,zi); xip=xi( m:-l:l,:) ;Xzum Plotten wird die Reihenfolge der berechneten Werte
umgekehrt % plot(zi ,xip(: '2)) %Die Schriftgrbfie wird erhbht; zusatzlich werden Parameterwerte ins Bild eingefilgt% set(gca,'FontSize'.16) text(. 5, .9*xip( 1,2), [ 'L = num2str( L) ,' m'] ,' Fontsize', 16) text ( .5,,8*xi p( 1,2), [' u0 = num2str( u0) , ' m/s'] ,' FontSize' ,16) text(.5,.7*xip(l,2),['x10 = ',num2str(xOzu)],'FontSize',16) text(.5,.6*xip(1,2),['Bo= ',num2str(Bo)],'FontSize',l6) I,
I ,
ylabel('Molanteil','FontSize',l6) xlabel('z / L','FontSize',l6)
IRAXOFUN function y = iraxOfun(x0) global xOzu Bo [z,x]=ode45( 'iraxkin', [0 11,[0 xO]); [m,n]=size( x) ; y=xOzu-x( m,2)-x( m,1)/Bo;
Man kbnnte jetzt noch die StrGmungsgeschwindigkeit verkleinern, was den Einflufi der axialen Dispersion versttirken wiirde. Fiir eine Abschtitzung darf man bis Re, = 1 gehen, ohne zu stark von Pe = 2 abzuweichen; man kann also im Rahmen des Beispiels uo um einen Faktor 10 erniedrigen. d ) Wir benutzen die Stofiilanz in der Form der G1. (5.35) und die RBs nach G1. (5.37). Wie schon in der vorstehenden Teilaufgabe c) konnen wir mit konstantem u c rechnen; fiir R1 gilt wiederum RY*xl mit RY = -&klpKatpo2:
(5.122) z
= 0:
X: = X I
-
--,1 dxl Bo clz
z = 1:
dXl =O
dz
(5.123)
Zur Vereinfachung der Schreibweise ist wieder z := f gesetzt. Wir kGnnen nun die Koeffizienten besetzen, die im Abschnitt 5.4.2 fiir die FVM angegeben sind; das Ergebnis wird gleich in codierter Form gebracht, die Parameternamen des Programms sollten sich unschwer den Koeffizienten der diskretisierten Gleichungen im Abschnitt 5.4.2 zuordnen lassen:
5.5 Probleme und Ldsungen
241
IRAXISO
AP=(l-O.l*Bo*dz)^5;A(IPI) ifAP
kl=l.l44e+O5*exp(-13636/TO); % Geschw.-Konstante, kmol/kg/s/barA2 l,Nz+l);
Sp=-kl*rhokat*po2*L/uO/cO*ones(
b=[l*xOzu,zeros(1,Nz)l; aPs=[aW(2: Nz)+aE(2:Nz)-Sp(2:Nz)*dz]; aP=[aE( 1)-Sp( l)*dz/2+l,aPs,aW(Nz)-Sp(Nz+l)*dz/2]; D=sparse( 1:N z t 1,l:Nz+ 1,a P) ;%Diagonale W=sparse(2: Nz+l, 1:Nz,-aW,Nz+l, Nz+l, Nz);%Unterdiagonale E=sparse( l:Nz,2:Nz+l,-aE,Nz+l,Nz+l,Nz);%Uberdiagonale AS=W+D+E;%A( Sparse) xll=AS\b’;
Vor dem Starten dieses Programms ist IRAXDATO aufzurufen und zusgtzlich Anzahl und Grtii3e der Diskretisierungsintervalle, Nz und dz =&, anzugeben. Bei der vorliegenden Aufgabe ktrnnen Sie durch Vergleich mit der analytischen Ltisung feststellen, wie fein die Diskretisierung fur eine gewllnschte Genauigkeit zu wahlen ist. Wenn ein solcher Vergleich nicht mtrglich ist - und das dUrfte in praktisch allen F a e n zutreffen, da man sonst j a keine numerische Ltrsung anstreben wiirde - muf3 man sich damit begnagen, die Ltrsung durch stufenweise feinere Diskretisierung gegen einen Grenzwert zu treiben. Gelingt das, kann man einigermden sicher sein, der richtigen Lbsung nahegekommen zu sein beweiskraftig ist das natihlich nicht. Auch im vorliegenden linearen Fall sollten Sie eine Annaherung dieser Art versuchen; als T e s t g d e bietet sich hier der linke Randwert an. e) Es wird ausnahmsweise kein Ltrsungsvorschlag gemacht. Der interessierte Leser mtige sich an dem Bulirsch’schen Randwertproblem im Abschnitt 5.2.3 orientieren sowie an dem verwandten Problem 6.3.4iiber den Diffusionseinfld in portisen Katalysatoren. f ) Bei einem linearen Problem wie dem vorliegenden sollte man eine analytische Ltisung erstellen und mit der numerischen vergleichen. Sehr einfach geht das mit MATLABs symbolischer Toolbox, wie gezeigt in SY MIRAX. SYMIRAX
% SYMIRAX loest die DGI Dy-D2y/Bo=-ktau*y” mit den Danckwertsschen % Randbedingungen SYMbolisch. Nach Besetzung von yo, Bo und ktau % (=k*L/uO) sowie Vorgabe von t (als Vektor) kann man y(t)-Werte % mit dem Befehl eval(yx) erhalten. ”
irax=’Dy-D2y/Bo=-ktau*y’;
242 5 Festbettreaktor - einphasige Modelle yallg=dsolve(irax); %Randbedingungen lassen sich - im Gegensatz zu Anfangsbedingungen nur anschlieflend in die Lbsung einarbeiten! % dydx=diff(yallg); dydxl=subs(dydx,'l');%Substitution der unabhtingigen Variablen (t)% dydxO=su bs(dydx,'O'); dydxOBo=syrndiv(dydxO,' Bo');%symbolische Division yallg0=subs(yatlg,'O'); Ibc=syrnsub(yallg0,dydxOBo);%symbolische Subtraktion Ibc=syrnsub(lbc,'yO');%Zeft boundary condition (Cl1.C22J=solve(lbc,dydxl, 'Cl,C2'); yx=su bs(yallg,C11, ' C1' ) ; yx=sub~(yx,C22,'C2'); yxl=subs(yx,'l'); yxO=su bs(yx,'O');
-
S Y M I R A X wurde mit der Version 4.2 entwickelt, einige der Anweisungen sind obsolet; Sie kbnnten es zur Ubung auf 5.x umschreiben. Wenn Sie SYMIRAX anwenden, sollten Sie genau die Formulierungen beachten: In der symbolischen DG1 bezeichnet y eine Konzentration. Zum Vergleich mit der numerischen L6sung uber IRAXZERO wird man daher zweckmaflig die Gleichung durch die Gesamtkonzentration dividieren; dann kann man ktau = -R10 setzen (R10 aus IRAXDATO), den Vektor t (fur r / L ) besetzen und - wie im Kommentartext von SYMIRAX beschrieben - mit eval(yx) die analytische Lbsung gewinnen. Die folgenden Anweisungen setzen das in die Tat um; das Ergebnis ist in Abb. 5.11 zu sehen:
iraxdatO iraxzero hold Current p l o t h e l d
symirax y0=0.015; kta u=- R10; t=0:0.1:1; pIot(t,eval(yx),'o')
5.5.7
Auswertung von Verweilzeitmessungen in einem Festbettreaktor (*)
In einem Festbettreaktor sollen Spuren eines organischen Schadstoffs in Luft (ca. 0.1 %) katalytisch mbglichst vollstandig verbrannt werden; gefordert sind Emissionswerte unter 1 ppm. In einem Technikumsreaktor von 120 cm SchtittIange werden bei Stramungsgeschwindigkeiten von 1.2 cm/s (bezogen auf Leerrohr) und verschiedenen Eingangskonzentrationen des Schadstoffs Umsatze von 90 % erzielt. Fur die technische Anlage wird geplant, Stromungsgeschwindigkeit,
5.5 Problerne und Lasungen
243
0.014d L = 0.15m u0 = 1 mls x l 0 = 0.015 60 = 100
ZIL
Abbildung 5.11: Isothermer FBR mit axialer Dispersion - Vergleich von numerischer (-) Lbsung nach dem Schdverfahren (IRAXZERO)und symbolischanalytischer (0)Lbsung (SYMIRAX). Rohrdurchmesser und Korndurchmesser des Katalysatores (0.625 cm) beizubehalten, die anfallenden Durchstitze auf entsprechend viele parallel geschaltete Rohre zu verteilen (Rohrbtindelreaktor) und den erforderlichen Umsatz durch ltingere Schilttschichten zu erreichen. Zur Vorsicht werden Verweilzeitmessungen im Technikumsreaktor durchgeftihrt, um den EinfluB der Dispersion abschtitzen zu kbnnen. Dazu wird ein radioaktiver Tracer unmittelbar ilber der Schilttung eingespritzt, ziemlich schnell, aber keineswegs als idealer Dirac-Puls, und mit Geigerztihlern in 15 und 105 cm Bettiefe die Konzentrations-Zeit-Verlgufe gemessen. Reprtisentative Ergebnisse sind in Abb. 5.12 dargestellt. Welche Schuttltinge sollte der geplante Rohrbilndelreaktor haben? (Dieses Problem beruht auf einem Beispiel in [22], S. 281.) Losungsvorschlag
Ein erfahrener Reaktionstechniker wird bereits an dem symmetrischen Verlauf der Antwortkurven abschtitzen kbnnen, daO die Dispersion nur eine vernach1Bsigbare Rolle spielen dilrfte. Da der Umsatz von 90 % im Versuchsreaktor unabhtingig von der Eingangskonzentration gefunden wurde, liegt eine Reaktion erster Ordnung vor. Im technischen Reaktor ist ein Umsatz von 99.9 % erforderlich, um den Schadstoffgehalt von 0.1 % auf 1 ppm zu bringen, also muL? - bei sonst gleichen Bedingungen - der technische Reaktor die dreifache Schilttlhge haben. Zur Ubung sollten Sie die Antwortkurven aber auswerten, um mit dem For-
244
5 Festbettreaktor - einphasige ModeJle
C(t)
n 07
0
1/ s
100
50
150
Zeit in s Abbildung 5.12: Antwortkurven an zwei Stellen eines Festbettreaktors a d einen Tracerpuls . C(t) ist die Tracerkonzentration c(t), normiert auf c(t)dt.
5.5 Probleme und Ltlsungen
245
melapparat der Verweilzeitmessungen und vor allem mit den Voraussetzungen vertraut zu werden; die angegebene Literaturstelle kann dabei mit Vorteil zu Rate gezogen werden. Lesen Sie erst weiter, wenn Sie die Auswertung selbst gemacht haben! Anders als in der angegebenen Literaturstelle, in der die Varianzen der beiden Antwortkurven gegeben sind, mtissen sie hier erst ermittelt werden. Es wtire unklug, sie aus dem Abstand der Wendepunkte zu berechnen, die nur schwierig genau genug auszumachen sind; leichter sind sie aus den Maxima zu ermitteln. Das weitere Vorgehen folgt dann der Literaturstelle und dtirfte auch ohne grbi3ere Erltiuterungen verstiindlich sein: t 1=15/ ( 1.2/0.4) ;t2= 105/ (1.2/0.4);%Die Verweilzeiten bis zu den Mefistellen; 0.4 ist das geschatzte, an iiblichen Werten orientierte relative Liickenvolumen der Schiittung.% Clmax=.064;C2max=0.05;% 1/s s12=( l/sqrt(2*pi)/Clmax)*2 % s2 s12 = 38.8562 s22=( l/sqrt(2*pi)/C2max) ^ 2 s22 = 63.6620 s2=s22-s12 s2 = 24.8058 % s2 gs2=~2/((t2-t1)*2) %gs2 ist 03 in [22] gs2 = 0.0276 %dimensionslos B0=2/gs2
Bo = 72.5637 % ftir 90 cm
Ftir den Versuchsreaktor mit 120 cm Ltinge ist die Bo-Zahl also fast 100, im technischen Reaktor wtirde sie dann bei 300 liegen. Wer es genau gerechnet hat, wird gefunden haben, d d zur Beriicksichtigung der axialen Dispersion der technische Reaktor - genauer: die Schtittltinge - urn etwa 2 % ltinger sein sollte als filr den idealen Reaktor oben berechnet.
5.5.8
Konzentrations- und Temperaturprofile im adiabatischen FBR mit axialer Dispersion (**)
Die Daten sind in der Datei IRAXDAT (0-Xylol-Beispiel) zusammengestellt: IRAXDAT
global c0 cpG delh L Nr p02 rhoG rhokat Tmax Tmin u0 R 1 phils global 41 phi2s k l N z L=3; %m R=0.0254/2;
246 5 Festbettreaktor - einphasige Modelle dp=O.O03;%Partikeldrrn pL=101325;%Pa p02=0.211; %bar RG=8314;%Gaskonstante T0=625; %K Eingangstemp Tu=625;% Umgebungstemp Tmax=1000;Tmin=300;%Grenzen fur FVM cO=pL/RG/273.2; uO=l;%m/s p0=.015; %entspricht hier dem Partialdruck in bar ~10=.0015; Perna=2;%Pe-Zahl, fuer mass, axial Bo=Pema*L/dp; Peha=l;%Pe, fuer heat, axial Boh=Pe ha*L/dp; Nz=100; dz=l/Nz; rhokat=1300; % kg/m3, Schuettdichte rhoG=1.293; % kg/m3 cpG= 1.046; % kJ/ kg/K delh=-1285400; % kJ/kmol oo/
..............................
%Fuer nichtadiabatischen Fall hw=159.1; % W/m2/K, Waermedurchgangskoeffizient an der Rohrwand
................................... ................................
%Fuer instationgren Fall cps=l; % solid specific heat in kJ/kg K cps=O.6*cps; %0.6 ist Volumenanteil des Feststoffs; rhoPO=L*rhokat*cps/uO/cpG/rhoG; dt =100;
aPOO=rhoPO*dz/dt;
................................... xlold=xlO*ones( Nz+l,l); Told=TO*ones( Nz+l,l); Tanf=Told; xlanf=xlold;
Losungsvorschlag
Urn in die FVM einzufiihren, wurden bisher zwei lineare PDGls gelbst: das Beispiel der instationlren Wlrmeleitung in der Wand eines Reaktionskalorimeters (Abschnitt 5.2.2) und die Aufgabe, in einem isothermen FBR mit axialer Dispersion das Konzentrationsprofil bei einer Reaktion erster Ordnung zu berechnen (Problem 5.5.6). Hier nun haben wir es wegen des Arrhenius-Terms in den Bilanzgleichungen mit einem nichtlinearen Problem zu tun: Wir werden die nichtlinearen Terme linearisieren und dann die Lbsung iterativ gewinnen.
5.5 Probleme und Losungen
247
Von den Moglichkeiten, zu linearisieren, wiihlen wir zweckmiiflig die im Abschnitt 5.4.2 beschriebene Methode, um den Molanteil zwischen Null und eins zu halten und die Temperatur innerhalb verniinftiger Grenzen. Das Vorgehen wird aus dem Programm IRAXAD deutlich, in dem wie in den enviihnten Beispielen die Variablen- und Parameternamen erkennbar den Koeffizienten der diskreten Gleichungen weitgehend W i c h sind. IRAXAD
% IRAXAD.M, 1RAXDAT.M und 1RAXADKI.M berechnen das T- und % x-Profil in einem ADiabatischen IdealRohr mit AXialer Dispersion. % Die DATen in IRAXDAT sind fuer die Oxidation von 0-Xylol in einem % FBR. IRAXADKI berechnet aus KInetischen Daten die Quellterme Sc % und Sp fuer die Patankar-Methode der finiten Bilanzvolumina. % Die Ergebnisse sind in den (Nz+l,l)-Vektoren xl und T. AP=( l-O.l*Bo*dz) ^5; APh=( l-O.l*Boh*dz)^5; ifAP
aP=[aE( 1)-Sp( l)*dz/2+l,aPs,aW( Nz)-Sp(Nz+l)*dz/2]; D=sparse( l:Nz+l,l:Nz+l,aP);
W=sparse(2:Nz+l,l:Nz,-aW,Nz+l,Nz+l,Nz); E=sparse( 1:Nz,2:Nz+l,-aE,Nz+l, Nz+l, Nz); AS=W+D+E; xl=AS\ b' ; %Abfrage auf signifikante Veriinderung im Iterationsschritt%
248
5 Festbettreaktor - einphasige Modelle
if iter == 0 a bkr=( xl-xlold). /xlold;
if norm(abkr,inf)
> .000001
iter=l;
end end xlalt=xlold; xlold=xl;
%Berechnung des T-Profils% S=iraxadki(xlold,Told) ; Sc=S(3,:);Sp=S(4,:); bs=Sc( 2:Nz)*dz; b=[Sc( l)*dz/2+1*TO,bs,Sc(Nz+l)*dz/2]; aPs= [aW(2:Nz)+aE(2:Nz)-Sp(2:Nz)*dz]; aP=[aEh( 1)-Sp(l)*dz/2+l,aPs,aWh(Nz)-Sp(Nz+l)*dz/2]; %aEh(Nz+l)=[]; D=sparse( l:Nz+l,l:Nz+l ,aP); W=sparse(2:Nz+l, l:Nz,-aWh,Nz+l ,Nz+l ,Nz); E=sparse( 1:Nz12:Nz+l,-aEh,Nz+l ,Nz+ 1,Nz); AS=W+D+E; T=AS\b'; %Abfrage auf signifikante Vertinderung im Iterationsschritt% if iter == 0 abkr=(T-Told)./Told; if norm(abkr,inf) > .01 iter=l;
end end Ta It =To1 d ; To1d =T ; end
Die Linearisierung der Quellterme sind im UP
IRAXADKI
codiert:
IRAXADKI
function Y = iraxadki(x1,T) global c0 cpG delh L Nr p02 rhoG rhokat Tmax Tmin u0 R1 phils global Q1 phi2s k l Nz
% IRAXAD.M, 1RAXDAT.M und 1RAXADKI.M berechnen das T- und % x-Profil in einem ADiabatischen IdealRohr mit AXlaler Dispersion. % Die DATen in IRAXDAT sind fuer die Oxidation von 0-Xylol in einem % FBR. IRAXADKI berechnet aus KInetischen Daten die Quellterme Sc % und Sp fuer die Patankar-Methode der finiten Bilanzvolumina. % Die Ergebnisse sind in den (Nz+l,l)-Vektoren xl und T . x l = x l ' ;T=T';
kl=l.l44e+O5*exp(-13636./T); % Geschw.-Konstante, kmol/kg/s/bar"2
5.5 Probleme und Losungen rl=kl*rhokat*po2.*xl; R1=-rl* L/ uO/cO; Ql=rl*(-del h)*L/uO/rhoG]cpG; phils=zeros( l,Nz+l);%entspricht phi2s=Trnax*ones( 1,Nz+l); Scl= R1.* p hi 1s./(phi ls-xl) ; Sc2=Q 1.* phi2s./( phi2s-T); S p l=-R1 ./(phi ls-xl) ; Sp2=-Q1./( phi2s-T); Y=[Scl;Spl;Sc2;Sp2];
249
61
Sie kiinnen nun Rechenliiufe fiir verschiedene Werte von x10 und TO starten, auch Nz vertindern und eine gentigend feine Diskretisierung suchen (Test auf asymptotisches Erreichen eines Grenzwerts ftir das Profil oder ausgewtihlte Groaen, z. B. die x1 und T bei z = 0). Achten Sie darauf, da5 die adiabatische Temperaturerhohung nicht iiber Tmax hinausschieflen kann! In engen Grenzen kann man auch probeweise die Pe-Zahlen iindern.
5.5.9
FBR rnit periodischer Stromungsumkehr (**)
Eine schtidliche organische Verbindung in Luft soll katalytisch in einem adiabatischen FBR verbrannt werden. Die Reaktionsbedingungen sollen denen des o-Xylol-Beispiels entsprechen, die in der Datei IRAXDAT zusammengestellt sind. Wie wir schon aus den vorhergehenden Aufgaben wissen (konnen), wird bei Eingangsbedindungen von x10 = 0.0015 und TO = 625 K kein vollstiindiger Umsatz erreicht, wohl aber z. B. mit x10 = 0.004. Wenn man nun von x10 = 0.004 auf x10 = 0.0015 zuriickgeht, wird sich der Reaktor abktihlen, und es wird sich nach einiger Zeit wieder der zugehurige stationiire Zustand einstellen, also kein vollstandiger Umsatz; offenbar reicht der Energieinhalt fiir diesen Fall nicht aus, um die zugehiirige adiabatische Endtemperatur im Reaktor einzustellen. Man kann nun der allzu gro5en Abktihlung entgegenwirken, indem man jedesmal rechtzeitig die Stromungsrichtung umkehrt - das Itifit sich technisch durchaus bewerkstelligen. So erzeugt man eine hin und her wandernde Wtirmezone, in der sich auch bei der niedrigeren Eingangskonzentration der gesamte Schadstoff umsetzen kann. Diese Betriebsart soll modelliert werden. Es kbnnen dann auch andere Verhdtnisse untersucht werden, z. B.: Ein Abgas mit x10 =0.004 Schadstoff, das rnit 298 K anfiillt, wird zuntichst mit Fremdenergie auf 625 K Eingangstemperatur aufgeheizt, dann wird die Fremdenergie abgeschaltet.
Losungsvorschlag Wie man stationiire Profile im FBR mit axialer Dispersion berechnet, wurde schon im Problem 5.5.8 gezeigt. Diese Programmabfolge betten wir jetzt in eine Zeitschleife ein, die fiir vorgegebene Zeitschritte dt eine stationtire Zwischenl6sung iterativ berechnet, spiitestens bis ein neuer Zeitschritt keine signifikante Profiltinderung mehr bringt - dann ist die stationtire Liisung erreicht. Fur die
250 5 Festbettreaktor - einphasige Modelle Fahrweise mit wechselnder Stromungsrichtung warten wir nicht die endgiiltige stationtire Losung ab, sondern tindern die Str6mungsrichtung spiitestens, wenn der Schadstoff droht, durchzubrechen. In der Praxis wiirde man vielleicht einen Sensor benutzen; wir machen uns die Sache etwas einfacher und wechseln die Stromungsrichtung rechtzeitig nach einer bestimmten, durch Probieren gefundenen Anzahl von Zeitschritten. Das Umschalten iibernimmt ein kleines Steuerprogramm, IRAXCTRL, das durch einen Schalter (steu) aktiviert wird. Einige Grafik-Anweisungen erlauben, die entstehenden Profile zu verfolgen, auch die wandernden, wenn der Steuerparameter steu auf eins gesetzt ist. IRAXIN
eing='links ';%Steuerparameter fiir grafische Ausgabe h=gcf; axis([l Nz+l TO T0+200]) n=O;
aPO=aPOO*ones( l,Nz+l); zeit=O;
zeitv= [0] ;Tv= [Tanf] ; AP=(l-O.l*Bo*dz) - 5 ; APh=( l-O.l*Boh*dz) - 5 ; ifAP
while item == 1 %Beginn derzeitschleife iterz=O; iter=l;
while iter == 1 %Beginn der Profilberechnung iter = 0; S=iraxadki(xlold,Told); Sc=S( l,:);Sp=S(2,:); bs=Sc( 2: N z ) * ~ z ; b=[Sc( l)*dz/2+1*~10,bs,Sc( Nz+l)*dz/2]; aPs=[aW(2:Nz)+aE(2:Nz)-Sp(2:Nz)*dz]; aP=[aE( 1)-Sp( l)*dz/2+l,aPs,aW( Nz)-Sp(Nz+l)*dz/2]; D=sparse( l:Nz+l, 1:Nz+l,aP); W=sparse( 2: Nz+l, 1:Nz,-aW,Nz+l, Nz+l, Nz);
5.5 Problerne und Lasungen 251
E=sparse( l:Nz,2:Nz+l,-aE,Nz+l,Nz+l,Nz); AS=W+D+E; xl=AS\b'; if iter == 0 a bkr=(xl-xlold)./xlold; if norm(abkr,inf) > -01 iter=l; end end xlalt=xlold; xlold=xl; S=iraxad ki(x1old ,Told); Sc=S( 3, :);Sp=S(4,:); bs=Sc(2:Nz)*dz; b=[Sc( l)*dz/2+ l*TO, bs,Sc( Nz+l)*dz/2]; b=b+aPO.*Tanf'; aPs=[aW(2: Nz)+aE(2: Nz)-Sp(2:Nz)*dz]; aP=[aE( 1)-Sp( l)*dz/2+l,aPs,aW( Nz)-Sp( Nz+l)*dz/2]; aP=aP+aPO; D=sparse( l:Nz+l,l:Nz+l,aP); W=sparse(2: Nz+l, 1:Nz,-aW, Nz+l, Nz+l, Nz); E=sparse( 1:Nz,2: Nz+ 1,-aE, Nz+l, Nz+l, Nz); AS=W+D+E; T=AS\ b'; if iter == 0 a bkr=(T-Told) ./Told; if norm(abkr,inf) > .01 iter= 1; end end Ta I t =Told ; Told=T; end %Ende der Profilberechnung abkr=(T-Tanf)./Tanf; if norm(abkr,inf) > .001 iterz=l; end Ta nf =T ; Tpr=T; xlpr=xl; if eing == 'rechts' %Die Vektoren werden umsortiert, um die grafische Ausgabe der StrClmungsrichtung anzupassen% Tpr=T( Nz+l:-1: 1); xlpr=xl(Nz+l:-1: 1); end
252
5 Festbettreaktor - einphasige Modelle
subplot( 2,1,1) plot(Tpr) axis([l Nz+l TO T0+200]) subplot(2,1,2) plot ( x lpr) axis([l Nz+l 0 xlO]) figure( h) drawnow if steu == 1 n=n+l; iraxctrl; end zeit=zeit+dt; zeitv=[zeitv,zeit]; Tv=[Tv,T]; end %while fuer zeit: Ende der Zeitschleife IRAXCTRL if n == 10 n=O; it e rz= 1;
Told=T( N ~ + l : - l : l ) ; Tanf=Told; xlold=xl( Nz+l:-1:l); i f eing == 'links ' eing='rechts'; else
eing='links '; end end
Ein typischer Programmlauf kbnnte wie folgt aussehen: 0
Daten einlesen: iraxdat Eingangswert fur die Konzentration (Molanteil) setzen: x10=0.004.
0
0
0
0
0
Steuerungsparameter auf Null setzen (keine Stromungsumkehr): steu=O. Entwicklung des T-Profils bis zum stationtiren Zustand berechnen und grafisch verfolgen: iraxin. Dann Eingangskonzentration herabsetzen: x10=0.0015. iraxin aufrufen: Das T-Profil wird fast ,,herausgeblasen"; kein vollstandiger Umsatz mehr.
Dann zum Wiederherstellen des ersten Profils: x10=0.004; iraxin;
5.5 Probleme und Lasungen
253
AnschlieBend Betrieb mit wechselnder Strt)mungsrichtung: x10=0.0015; steu=l; iraxin; Abbruch mit <pause>.
5.5.10 Simulation eines FBR nach dem zweidimensionalen Model1 rnit Hilfe der FVM (**) Das schon bekannte Beispiel der o-Xylol-Oxidation soll mit den Daten von Problem 5.5.3 fiir ein zweidimensionales Festbettreaktormodell mit Hilfe der FVM durchgerechnet werden; die Ergebnisse, vor allem die radialen Temperaturprofile, ktjnnen dann mit anderen Ntiherungen verglichen werden. Losungsvorschlag
Die Diskretisierung der Bilanzgleichungen nach der Methode der finiten Bilanzvolumina erfolgt nach dem von Patankar iibernommenen Schema im Abschnitt 5.4.2. Die Elemente ds, dy und dz mitssen fiir den Rohrreaktor auf Zylinderkoordinaten oder genauer auf Zylindersymmetrie umgerechnet werden; man kann allgemein setzen: uLL,= urr uy = 0, u, = u z , Ax = 27rrAr, Ay = Ar, Az = Az; im speziellen Fall des FBR mit radialer Dispersion ist natiirlich u, = 0. Es wird in z-Richtung ,,marschiert" und in r-Ftichtung iteriert, bis die Abbruchkriterien erfiillt sind; in Einweg-Koordinaten wie hier in z-Richtung gibt es keine riickwtirts gerichtete Wirkung (keine ,,Dispersion"), man braucht also nicht zu iterieren, sondern kann ,,marschieren". Die verwendeten Daten und Parameter gehen aus dem File FIBEDAT hervor; die Anzahl der Volumina in L- und r-Richtung wird mit den Parametern Nz und Nr eingestellt. FIBEDAT
global c0 cpG delh L Nr p02 rhoG rhokat Tmax Tmin u0 R1 phils global Q1 phi2s k l Nz global Gam Gah x10 TO dz dr Bi Tu cpG=l.046; % kJ/ kg/K delh=-1285400; % kJ/kmol Dmr=O.0003; %m2/s dp=0.003; hw=159.1; % W/m2/K, Waermedurchgangskoeffizient an der Rohrwand L=3.; %m lamr=0.7729; % W/m/K Nr=100; Nz=120; pL=101325; %Pa
254
5 Festbettreaktor - einphasige Modelle
p02=0.211; %bar R=0.0254/2; RG=8314; %kJ/kmol K rhoG=1.293; % kg/m3 rhokat=1300; % kg/m3, Schuettdichte Katalysator T0=625; %K Tmax=1000;Tmin=300; XTemperaturgrenzen fur die Iteration Tu=625; uO=l; %m/s, Leerrohrgeschwindigkeit x10=.015; % Molanteil von 0-Xylol am Eingang cO=pL/RG/273.2; dr=l/Nr; dz=l/Nz; Pehr=uO*rhoG*cpG*dp/( lamr*le-3); Pemr=uO*dp/Dmr; %Peclet Masse radial Gah=l/Pehr*dp/R*L/R; Gam=l/Pemr*dp/R*L/R; Bi=hw* R/la mr; BiGah=Bi*Gah;
Bei der Bi-Zahl handelt es sich hier um eine modifizierte Bi-Zahl, die statt mit dem W&meiibergangskoeffizienten an der Wand, a,, mit dem W2rmedurchgangskoefiienten h, gebildet ist. Wir sehen uns nun einige Schritte des L6sungsweges anhand des Skriptfiles F I X B E D 3 an: FIXBED3
rw=[];re=[];aEm~=[l;aWms=[];aEm=[];aWm=~;
aEh~=[];aWh~=[];aEh=[];aWh=[];rb=[];xl=[];T=[];
xlold=[];Told=[];xlaIt=[];Talt=[]; rw=dr/2:dr: 1-1.5*dr; re=rw+dr;
yo************************************ %Vorbesetzung der Vektoren aE, aW und aB %mit konstanten Werten fur Stoff-(m) und Enthalpie(h)-Bilanz aEms=Gam*re*dz/dr; aWms=Gam*rw*dz/dr; aEm=[aWms(l),aEms); aWm=[aWms,Gam*( 1-.5*dr)*dz/dr]; aEhs=Gah*re*dz/dr; aWhs=Gah*rw*dz/dr; aEh=[aWhs( l),aEhs]; aWh=[aWhs,Gah*( 1-.5*dr)*dz/dr]; rb=dr:dr:l-dr; aB=dr*rb;
5.5 Probleme und Ltlsungen 255
aB=[1/2*dr/2*dr/2,aB,l*dr/2];
...................................... %Anfangswerte xl=xlO*ones( Nr+l, Nz+l); T=TO*ones( Nr+l, Nz+l); xlold=xl;Told=T; iter=l; itnurn=O;
...................................... %Iteration in r-Ftichtung an aufeinanderfolgenden z-Stellen for j = 2:Nz+l iter=l;
while iter == 1 iter=O;
S=fi bekin(xlold(: ,j),Told(: j));
yo************************************ %Iteration der Stofiilanz Sc=S( l,:);Sp=S(2,:); bs=Sc( 2: Nr). *rb*dr*dz; aPs=aErns+aWms+aB(2:Nr)-Sp(2:Nr).*rb*dr*dz; b=[Sc( 1)*1/2*dr/2*dr/2*dz,bs,Sc( Nr+l)*l*dr/2*dz]; aP=[aErn( l)+aB( 1)*(1-Sp(l)*dz),aPs,aWm( Nr)+aB( Nr+l)*( 1-Sp( Nr+l)*dz)]; bsl=b'+aB' .*xl(: ,j-1); D=sparse( 1:Nr+ 1,l:Nr+ 1,a P) ; W=sparse(2:Nr+l,l:Nr,-aWm,Nr+l,Nr+l.Nr); E=sparse( l:Nr,2:Nr+l,-aEm,Nr+l,Nr+l,Nr); AS=W+D+E; xlj=AS\ bsl; xI=[xl(:, I:j-I),xIj];
yo************************************* %Konvergenz? if iter == 0
abkr=(xlj-xlold(:,j))./xlold(:,j); if norrn(abkr,inf) > ,0001 %KonvergenzabfrageZeile 43 iter=l; end end
yo************************************* xlalt(: ,j)=xlold(:,j); xlold(: ,j)=xlj;
yo************************************* %Iteration der Enthalpiebilanz S=fi bekin(xlold(:,j),Told(:,j)); Sc=S(3,:);Sp=S(4,:); bs=Sc(2: Nr).*rb*dr*dz; aPs=a Ehs+aWhs+aB(2: Nr)-Sp(2: Nr) .*rb*dr*dz;
256 5 Festbettreaktor - einphasige Modelle b=[Sc( 1)*1/2*dr/2*dr/2*dz, bs,Sc( Nr+l)*l*dr/2*dz+BiGah*Tu*l*dz]; aP=[aEh( l)+aB( 1)*(1-Sp(l)*dz),aPs,aWh( Nr)+aB( Nr+l) ... *( 1-Sp(Nr+l)*dz)+BiGa h*l*dz]; bsh=b'+aB'.*T(:,j-1); %Zeile 56 D=sparse( l:Nr+l,l:Nr+l,aP); W=sparse(2:Nr+l,l:Nr,-aWh,Nr+l,Nr+l,Nr); E=sparse( 1:Nr,2:Nr+l,-aEh, Nr+l,Nr+l, Nr); AS=W+D+E; Tj=AS\bsh; T =[T ( :,1:j-1) ,Tj] ;
yo**************************************
%Konvergenz? if iter == 0 abkr=(Tj-Told(:j))./Told(:,j); if norm(abkr,inf) > ,001 %Konvergenzabfrage Zeile 65 iter=l;
end end
yo************************************** Talt( :,j)=Told(:,j); Told(:,j)=Tj;
........................................ itnum=itnum+l;
end %while end "/j
Das Programm durfte nahezu selbsterklarend sein, da fast alle Namen gleichlautend mit den Variablennamen der FVM sind: So bedeutet etwa rw in Zeile 1 die radiale Koordinate an der westlichen Stelle eines Bilanzvolumens; aWms ist der Parameter aw der diskretisierten Gleichung fur die Massenbilanz, die Erweiterung s steht hier und bei den anderen Namen des Programms fur einen unvollstandigen Ausdruck (Vektor oder Matrix), in dem noch die Randbedingungen fehlen. Es sei daran erinnert, dafl es sich bei den Beispielprogrammen nicht um ausgefeilte Programme handelt: Die Reihenfolge ms oder hs ist z. B. nicht ganz konsequent durchgehalten, siehe etwa bhs in Zeile 56. Auch sonst hat das Programm Schonheitsfehler, von den wie immer fehlenden Fehlerabfragen ganz abgesehen: Die Toleranzen bei den Konvergenzabfragen in den Zeilen 43 und 65 sind z. B. nicht parametriert. Es hat aber den eigenen Test bestanden, auch nach vielen Monaten noch auf Anhieb verstandlich zu sein, und das mi-ige fur die hier angestrebten Ziele ausreichen. Um die Konzentrations- und Temperaturfelder zu berechnen, mufl man die gewiinschten Anfangsbedingungen in FIBEDAT setzen, i. a. also x10 und TO, dann dieses File und anschlieflend F I X B E D 3 aufrufen. Zuvor oder anschlieflend sollten wir noch einen Blick in das UP FIBEKIN werfen, um die Behandlung der Quellterme zu sehen; abhangig vom Vorzeichen werden die Grenzen phils
5.5 Probleme und L6sungen
257
und phi2s (far ,,Phi-Schlange") gesetzt, um zu verhindern, daB die abhangigen Variablen x l und T aus den vorgegebenen Grenzen herauslaufen. FIBEKIN
function Y = fibekin(xl1,TI) global c0 cpG delh L Nr p02 rhoG rhokat Trnax Tmin u0 R1 phils global Q1 phi2s k l xll=xll';TI=TI'; kl=l.l44e+05*exp(-13636./Tl);% Geschw.-Konstante, kmol/kg/s/bar^2 % kl=O; r l = k l* rhokat *po2. *XU; Rl=-rl*L/uO/cO; Ql=rl*(-del h)*L/uO/rhoG/cpG; phils=ones( 1,Nr+l); kRl=find(Rl < 0); phils( kRl)=O*ones(size(kRl)); phi2s=Tmax*ones( l,Nr+l); kQl=find(Ql < 0); phi2s(kQl)=Trnin*ones(size( kQl)); Scl=Rl.*phils./(phils-xll);
Sc2=Ql.*phi2s./( phi2s-TI); Sp 1=-R1 ./(phi Is-xll) ; Sp2=-Q1./( phi2s-TI); Y=[Scl;Spl;Sc2;Sp2];
Die Zeile 6 ist desaktiviert; wenn man sie aktiviert, erhalt man die Ergebnisse filr den Warmetransport in einem FBR ohne Reaktion, die man mit analytischen Losungen vergleichen kann - das dient hier natiirlich zur Oberprilfung des Rumpfprogramms, insbesondere der richtigen Implementierung der Randbedingungen. Das Temperaturfeld nach einem Rechenlauf mit Standardeinstellungen und einem groben Gitter (Nz=12, Nr =lo) ist in Abb. 5.13 zu sehen. Bevor Sie weiterlesen, versuchen Sie, die 3-D-Abbildung selbst zu erzeugen!
z=O:dz:l; r=O:dr:l; R=r'*ones( lJ3); Z=ones( 11,l)*z; mesh(R,Z,T)
258 5 Festbettreaktor - einphasige Modelle
660 650 Y
.5640
c-
630
1
0 0
r/R
Abbildung 5.13: Temperaturfeld bei der o-Xylol-Oxidation (Nr=lO, Nz=12).
5.5.11
Losung der Wiirmeleitungsgleichung rnit der Linienmet hode (* *)
Die eindimensionale Wgrmeleitungsgleichung mit konstantem Koeffizienten, mit anderen Randbedingungen als in Abschnitt 5.2.2,
(5.124)
t=O:T=O, t = 0 : T = f(z)
z=l:T=O
fitrallet
(5.125) (5.126)
soll numerisch gelbst und das Ergebnis rnit der analytischen Losung verglichen werden. In dieser Gleichung ist c2 = L2X/pcp,wobei a = X/pcp die sogenannte Temperaturleitfahigkeit ist, die hier als konstant, d. h. ortsunabhangig angenommen wird. Als Anfangsprofil f ( z ) wahlen wir f ( z ) = z filr 0 5 z 5 0.5, f ( z ) = 1 - z fiir 0.5 < z 5 1
(5.127)
Die Warmeleitungsgleichung mit den angegebenen Anfangs- und Randbedingungen soll durch Diskretisierung der Ortskoordinate nach der FVM in eine gewohnliche DG1 ilbergefilhrt und mit einem DG1-Loser gelost werden, sowohl in MATLAB als auch in SIMULINK. Man kann dann untersuchen, wie fein man diskretisieren muf3, um eine gute Ubereinstimmung mit der analytischen Lbsung zu erzielen. Die analytische Losung ist:
5.5 Probleme und Ltrsungen 259
00
T(z,t) =
B,sin(n~z)exp(-(cn~)~t)
(5.128)
n= 1
mit
(5.129) Mit dem vorgegebenen Anfangsprofil ergibt sich Bn = 0, wenn n gerade, und
B,
4 = -fiir n = 1 , 5 , 9 , . . .
n2G
(5.130) (5.131)
Losungsvorschlag
Das folgende Skriptfile WGL ANAL zeigt, wie man ein Programm zur Berechnung von T ( z ,t) sehr kompakt gestalten kann. Bei t = 0 kann man sehr schbn untersuchen, wie die Genauigkeit von der Anzahl der Glieder abhtingt, nach der man die unendliche Summierung abbricht. WG L - ANAL
c = 1; t = 0;
n l = 1 : 4 : 81;
n2=3:4:83; oln=ones(l,length(nl)); %oln=olnl=oln2 Bn = [I; Bn(n1) = 4/piA2* oln./nl.*2; Bn(n2) = -4/piA2 * oln./n2.^2; Bn(2:2:length(Bn)) = 1; %Die Nullen aus Bn entfernen Bn = Bnf; z = 0 : .01 : 1; Iz = length(z);olz = ones(1, Iz); nln2 = [sort([nI,n2])]1; Tzt = sum(Bn * olz. * sin(pi * nln2 * z). * (exp(-(c * pi * nln2).^2* t) * 012)); Filr die numerische Berechnung von T ( z ,t ) nach der MOL diskretisieren wir die Ortskoordinate z nach der FVM; dabei kunnen wir uns auf die gesamte Diskretisierung von G1. (5.124) sttitzen, die wir schon im Abschnitt 5.2.2 durchgefiihrt haben; fur unsere speziellen Bedingungen, c = 1, 62, = 62, = Az, erhalten wir:
(5.132)
260 5 Festbettreaktor - einphasige Modelle oder
8Ti
at = ai-ITi-1
+ aiTi + U ; + ~ T , +i~=, 2 . . . N z
(5.134)
Wie bisher ist ao = UNr+2 = 0; aus den Randbedingungen folgt: al = a2 = 0, a N z = a,vz+1 = 0. Mit dem folgenden Skriptfile WGL-FVM kann man die sparse Matrix berechnen: WGL-FVM
global AS Nz=lO; dz=l/Nz; z=O:dz:l; aP=-2/dz ^2*ones( l,Nz+l); aP( l)=O;aP( Nz+l)=O; aW=l/dzA2*ones( l,Nz+l); aW( Nz+ 1)=0; a W( 1)=[I; aE=l/dz^ 2*ones( 1,Nz); aE( 1)=0; D=sparse( l:Nz+l,l: Nz+l,aP); W=sparse(2:Nz+l, l:Nz,aW,Nz+l,Nz+l, Nz); E=sparse(l:Nz,2:Nz+l,aE,Nz+l,Nz+l,Nz); AS=W+D+E; yO=[z( l : N z / 2 t l ) , l - z ( Nz/2+2:Nz+l)]; %Anfangsbedingung
Das F'unktionsfile WGL-FVM - K I N filr den DG1-Loser gestaltet sich besonders einfach: WGL-FVM - K I N function dy = wgl-fvm-kin(t,y)
global AS dy=AS*y;
Ein Rechenlauf erfolgt mit [tn ,yn]=odel5s( 'wgl -fvm
-ki n',[0 11,yo);
Wir konnen nun analytisch und numerisch Temperaturprofile zu verschiedenen Zeiten berechnen und vergleichen und dabei die Auswirkungen verschieden feiner Diskretisierungen studieren; bei der analytischen Losung milssen wir geniigend Summenglieder mitnehmen. Fiir den Vergleich milssen Sie dafiir sorgen, dafi die z-Diskretisierungen gleich sind. Eine gute Moglichkeit ist, zunachst eine numerische Losung zu berechnen und dann WGL-ASAL zu edieren: In der drittletzten Zeile wird z=O:dz:l eingesetzt, in der zweiten Zeile t=tn(n), wobei n zwischen 1 und length(tn) liegt. Dann bringen die Anweisungen
5.5 Probleme und Losungen
261
wgl -anal plot(yn( n,:))
hold plot(Tzt,'o')%oder plot(Tzt,'r') oder tihnliches
einen grafischen Vergleich. (Selbstversttindlich k6nnen Sie auch die beiden Anweisungen in WGL-ANAL von vornherein parametrieren und dann nach Bedarf beset Zen.) Etwas Neues ist die Behandlung des Gleichungssystems y in SIMULINK: Im Matrix-Gain-Block werden nur volle Matrizen angenommen, aber in der Ausfuhrung der Rechnungen werden bei diinn besiedelten Matrizen sparse Techniken angewendet; insofern kann nur ein Speicherproblem entstehen, aber kein Nachteil in der Rechengeschwindigkeit. Ein SIMULINK-Diagramm besteht in unserem Beispiel im wesentlichen aus einem Integrator und einem Matrix- GainBlock, d a m kommen Ausgabe- oder Visualisierungsblocke; auf ein Vorbild kann wohl verzichtet werden.
5.5.12
Berechnung der Nullstellen fur die orthogonalen Polynome nach G1. 5.106 (***, nicht SE)
Losungsvorschlag Der Befehl mhelp orthopoly im MATLAB-Fenster gibt zuntichst einen Uberblick iiber die orthogonalen Polynome der Extended Symbolic Math Toolbox; mit der Erweiterung mhelp orthopoly[P] erhalten wir dann Auskunft iiber die Jacobi(und als Spezialfall: die Legendre-) Polynome, definiert durch die Beziehung
(5.135) mit dem Kronecker-Symbol 6 i j . Die Substitution x = 2u2 - 1 iiberfiihrt dieses Integral in die von uns gewiinschte Form
(5.136) mit a = cy und b = 2p + 1. Wir konnen also die Jacobi-Polynome aus der Toolbox verwenden mit a = a = 0 oder 1 und p = -1/2,0,1/2 fur b = 0, 1,2. Die Nullstellen der JacobiPolynorne rechnen wir urn mit u = .-/, Das Programm OKNULLSY fiihrt die angegebenen Schritte aus:
262 5 Festbettreaktor - einphasige Modelfe OKNULLSY function xj = oknullsy(N,a,b)
%oknullsy erzeugt den Vektor xj der Nullstellen %der orthogonalen Polynome in der symmetrischen %Naeherungsfunktion y (x)=y ( 1)+( 1-x 2) Sum(a(i)P(i-1) (x 2). %Die orthogonalen Polynome sind definiert durch %Int(O,l)w(x^2)P(i)(x"2)P(j)(x"2)x^bdx=C*(i)delta(i,j) %Aufruf [xj]=oknullsy(N,a,b) mit %N Anzahl der inneren Kollokationsstellen, %a=O: w(x^2)=1, a=l: w(x^2)=(1-x^2), %b=0,1,2: planar, zylinder-, kugelsymmetrisch ^
syms x maple( 'with( orthopoly);'); b=1/2*( b-1); st=['P(',num2str( N),',',num2str(a),',',num2str(b),'.x)']; op=maple( st); p=sym2poly(eval(op)); xj=sqrt( 1/2*( l+roots( p))); xj =sort(xj);
5.5.13
Berechnung der Matrizen A , B , Q und W fur die orthogonale Kollokation (*)
Losungsvorschlag
Die Matrizen sind im Abschnitt 5.4.4 definiert; ORTHKOL enthtilt die Codierung. Wer iiber die erweiterte symbolische Toolbox nicht verfiigt und auch nicht ilber MAPLE oder ein anderes Prcgrammpaket fur symbolische Rechnungen, kann die Nullstellen xj der Polynome in JACOBI-NULL.MAT benutzen; sie sind filr 1 bis 8 Stiitzstellen filr die drei ilblichen Geometrien angegeben; die Zuordnung diirfte selbsterklarend sein: xjzyl2 z. B. sind die beiden Nullstellen des Polynoms zweiten Grades nach G1. (5.106) fur Zylindergeometrie. ORTHKOL function [A,B,Q,W]=orthkol(xj,b012,~12)
%orthkol berechnet die (N+ 1)* (N+ 1)%Matrizen A, B, Q und den Zeilenvektor W %fuer die symmetrischen Naeherungsfunktionen %y (x)=y ( 1)+(I-x- 2) Sum(a(i) P(i-1) 2)) %Die Polynome erfilllen die Orthogonalitaets%bedingung Int(0 bis l)(w(xA2)P(j)P(i)dx= 0 %fuer i -= j. % %N ist die Anzahl der inneren Kollokationsstellen, %ihre Werte werden mit dem Spaltenvektor xj %eingegeben. (XI
5.5 Probleme und Ltlsungen 263
% %b012 bestimmt die Geometrie: b012=0 planar, %bO12= 1 zylinder-, b012=2 kugelsymmetrisch.
% %w12 bestimmt den Gewichtsfaktor w: w12=1, w=l; %w12=2, w=(l-x^2) % %Es ist: dy/dx=Ay, d2y/dxA2+b012dy/dx/x=By, % y(x)=Sum(d(i)*xA(2i-2))mit d=inv(Q)y. % %Quadratur: Das Integral von 0 bis 1 ueber %f(xA2)xA(b)dx= Sum(W(j)f(x(j)) N=length(xj) ;%xj sind die im vorhergehenden Problem %ermittelten Nullstellen [z,s]=size(xj); if z < s, xj=xj’; end; XI=[xj;11; XO l=xl*ones( 1,N+ 1); il=l:N+1;11=il’*ones(1,N+1);ll=ll’; Q=XOl. (2*11-2); C=( 2*11-2). *XOl. (2*11-3); iQ=inv( Q); A=C*iQ; D=(2*11-2).*(2*11-3).*XOl. ^(2*11-4); B=D*iQ; f=ones( 1,N+1)./(2*il-l+b012); W=rCiQ; .=,
Vor dem Start von ORTHKOL mui3 OKNULLSY aufgerufen werden, sofern die erweiterte symbolische Toolbox vorhanden ist. Sonst liidt man zuniichst JAC O B I - S U L L . M A T und weist xj den gewlinschten Nullstellenvektor zu (z. B. fiir Zylindergeometrie bei zwei inneren Kollokationsstellen: xj = xjzyl2).
5.5.14 Oxidation von 0-Xylol nach dem zweidimensionalen Model1 eines FBR (Orthogonale Kollokation) (* * *) Das schon bekannte Beispiel der o-Xylol-Oxidation sol1 mit den Daten von Problem 5.5.3 fiir ein zweidimensionales Festbettreaktormodell mit Hilfe der orthogonalen Kollokation (OK) durchgerechnet werden. Losungsvorschlag OKDAT stellt die Daten bereit, darunter die Anfangswerte x l und T (s. a. FBRDAT, FIBEDAT und MOLDAT). Die Stutzstellen und die OK-Matrizen werden mit
264 5 Festbettreaktor - einphasige Modelle den Programmen OKNULLSY und ORTHKOL erzeugt, die in den beiden vorhergenden Problemen beschrieben sind. Wer uber die erweiterte symbolische Toolbox nicht verfitgt und auch nicht tiber MAPLE oder ein anderes Programmpaket fur symbolische Rechnungen, kann die Nullstellen xj der Polynome in JACOBI-NULL.MAT benutzen; sie sind fur 1 bis 8 Stutzstellen fur die drei ublichen Geometrien angegeben; die Zuordnung durfte selbsterklarend sein: xjzyl2 z. B. sind die beiden Nullstellen des Polynoms zweiten Grades nach G1. (5.106) fur Zylindergeometrie. N=2;a=1; b=l; xj=o knuIIsy( N,a, b) xj = 0.3938 0.8031
% Alternativ: load jacobi-null; xj=xjzyR% [A, B,Q,w]=orth kol (xj ,1,2) A = -2.5396 3.8256 -1.2860 -1.3777 -1.2452 2.6229 1.7155 -9.7155 8.0000 B = -9.9024 12.2997 -2.3973 9.0337 -32.7643 23.7306 22.7575 -65.4241 42.6667 Q = 1.0000 0.1551 0.0240 1.0000 0.6449 0.4160 1.0000 1.0000 1.0000
w= 0.1882 0.2562 0.0556
Nun konnen die DGls an den Stutzstellen integriert werden; sie sind im U P codiert:
OKKIN
OKKIX
function dy = okkin(z,y)
% Bilanzgln fuer das o-Xylol-Beispiel. Zweidimensionaler, % einphasiger, nichtisothermer FBR. Zu verwenden mit % okdat. global A B klOs Luc hLurcp BiGah Tu Nr Gam Gah Tu xi=y(l:Nr); Ti=y( Nr+l:2*Nr); xl=y(l:Nr); T=y(Nr+l:2*Nr);
5.5 Probleme und Ldsungen
265
yoRandbedingungen********************** xl(Nr+l)=-A(Nr+l,l:Nr)*xl/A(Nr+l,Nr+l); T( Nr+l)=(BiGah*Tu-A(Nr+l,l:Nr)*T)/(A(Nr+l,Nr+l)+BiGah);
yo************************************* r=klOs*exp(-13636./Ti).*xi; R=-r*Luc; Q=r*hLurcp; dx=Gam*B( l:Nr,:)*xl+R; dT=Gah*B( l:Nr,:)*T+Q; dy=[dx;dT];
Losung der DGLs: [z,y]=odel5s( 'okkin',[0 11,[xl;T]); Aus den Werten y an den Stiitzstellen werden die vollstiindigen Profile berechnet; das ilbernimmt das Scriptfile OKRAND: OKRAND
% Berechnung von Werten an aequidistanten x-Stellen %O:l/Nx:l aus den Werten an den Nr inneren Kollokations%stellen. bereitgestellt in x l r und Tk1filr die Bedingungen %des 0-Xylol-Beispiels im FBR mit radialer Dispersion.
% %Nx muss im File gesetzt werden. y1 Nr und die Kollokations%Matrizen A, B, Q und W muessen im Arbeitsspeicher vorhanden sein. ys=y'; % y=[xl;T] an den inneren Kollokationsstellen yoRandwerte ................................. xlNrl=-A( Nr+l,l:Nr)*ys(l:Nr,:)/A( Nr+l,Nr+l); TNrl=( BiGah*Tu-A(Nr+l,l:Nr)*ys( Nr+l:2*Nr,:))/(A(Nr+l,Nr+l)+BiGah);
yo*****************************************
iQ=inv(Q); dxl=iQ*[ys( l:Nr,:);xlNrl];%d-Vektor dT=iQ*[ys( Nr+l:2*Nr,:);TNrl]; % Berechnung von Werten an aequidistanten x-Stellen
yo'oo<=x<=~yo******************************* Nx=lO;
il=l:Nr+l;ll=ones(Nx+l,l)*il; x=O: 1/Nx: l;X=x'*ones( 1,Nr+l); Qx=X. (2*11-2); xlr=Qx*dxl; Tr=Qx*dT; A
........................................... Nach dem Aufruf von OKRAND kann man die (Tr,z)-Profile grafisch ausgeben.
266 5 Festbettreaktor - einphasige Modelle
5.5.15
Oxidation von o-Xylol nach dem zweidimensionalen Modell eines FBR mit Hilfe von FEMLAB (nicht SE)
Besitzer von FEMLAB kunnen das Problem im Abschnitt 5.5.10 bzw. 5.5.14 mit Hilfe dieser Software angehen. Ein Schwierigkeitsgrad wird in diesem Fall nicht angegeben, da er von der Vertrautheit mit diesem Programmpaket abhangt. Losungsvorschlag Ein ganz iihnliches Beispiel ist in dem FEMLAB-Manual User's Guide and Introduction auf Seite 1-161 zu finden. Wir ktjnnen uns dort anlehnen, mlissen aber natitrlich unsere eigenen Daten und zweckm&ig auch die eigenen Ausdrucke und Symbole einsetzen. Wesentliche Unterschiede: Unser Modell ist Nonlinear stationary, nicht General Time-dependent, und es hat keine axialen Dispersionsterme. Wenn wir unsere Modellgleichungen noch um diese axialen Dispersionsterme erweitern, kihnen wir uns ganz an das Beispiel im Handbuch halten. Bei den PDE Specifications finden wir namlich die Gleichung
W = F
(5.137)
r =-CV~
(5.138)
wobei
und 4 (bei FEMLAB u ) filr die abhsngigen Variablen steht, hier T und c oder z. (Eigentlich m a t e n die vorstehenden Gleichungen in Vektor-Matrix-Form formuliert sein.) Wenn wir - wie in der Vorlage - im GUI bequemerweise ein rechteckiges Bilanzgebiet, also ein zweidimensionales cartesisches Koordinatensystem ( z , r ) wahlen, ktjnnen wir fitr unseren Fall ansetzen:
(5.139) Hier ist B o die Bodensteinzahl (fur die Stoff- bzw. Warmebilanz), Ga steht filr die Koeffizienten bzw. 1Pet,,, ! hR LR in den Gln. (5.70) und (5.71), die in den Daten-Files (FIBEDAT oder OKDAT) Gam und Gah heii3en. Filr Bo wahlen wir so hohe Werte, dai3 die axiale Dispersion nicht ins Gewicht fallt. (Wir konnen auch auf die axialen Dispersionsterme verzichten und die Eintrage bei den PDESpezifikationen sowie den Randbedingungen entsprechend andern.) Alle anderen Terme der Bilanzgleichungen werden in F zusammengefdt. Der interessierte Leser kann sich die gesamte Problemstruktur in dem cell array ,,fern" ansehen, das mit FIXBED-EINST.MAT in den Arbeitsspeicher geladen wird; ein Beispiel, F fitr die Warmebilanz:
k % k
5.5 Problerne und Ldsungen
267
fem.equ.f{l}{ 1) ans = '-Tz+Gah.*Tr./r+ksT.*c.*exp(-13636./T)' %kst=kl0*rhokat*po2*(-delh)*L/(u0*cO), siehe OKDAT; Tz und Tr bezeichnen die partiellen Ableitungen von T.% Hier wird natiirlich vorausgesetzt, dai3 der Leser sich mit FEMLAB auskennt, speziell mit fern, und ebenfalls mit MATLABs cell arrays. Es wird darauf verzichtet, die Ltlsung als 3D-Plot wiederzugeben, weil das bereits in der Abb. 5.13 geschehen ist - wenn auch ftir ein sehr grobes Gitter. Stattdessen ktinnen wir uns einen 2D-Plot ansehen, z. B. T ( z ) bei verschiedenen r: plot( fern.mesh. p( l,:),fem.sol.u(1:1605),Id')
0.2
0.4
0.6 z/L
0.8
I
1
Abbildung 5.14: Temperaturfeld bei der *Xylol-Oxidation berechnet mit FEMLAB. Werte an den Knoten der finiten Elemente. Abb. 5.14 It& den Temperaturverlauf deutlich erkennen, obwohl es keine Linien konstanten Radius gibt. Mit dem FEMLAB-Befehl postinterp kann man sich aber T ( r )an der Stelle T erzeugen, z. B.: r=0.5; xx=[O:O.Ol: l;r*ones(1,101)]; [uu,pe]=postinterp(fem,fem.sol.u,xx); plot(xx( l,:), UU( 1,:))
%Auf die Wiedergabe des Plots ist hier verzichtet.
Aus technischen Gründen bleibt diese Seite leer
Kapitel 6
Festbettreaktor zweiphasige Modelle 6.1
Transportlimitierungen zwischen den Phasen
Der Stofftransportwiderstand zwischen Gas und Kornoberfliiche wird auch heute noch in den meisten einschliigigen Lehrbtichern zu stark vereinfacht dargestellt: Nach der Filmtheorie ist der molare Strom einer Komponente i im stationtiren Zustand gegeben durch
N~u, = /~U,(C? - ~ f =) -R6
11
(6.1)
wobei p = $. ( N ist von der Dimension her eine Stromdichte.) Stoffiibergangskoeffizient p und Diffusionskoeffizient D miii3ten eigentlich indiziert sein, denn sie beziehen sich a d die Komponente i. Diese so einfachen Beziehungen gelten aber leider nur in Ausnahmeftillen wie biniire Gemische, stark verdilnnte Gemische oder Gemische, die nur tihnliche Molektile enthalten; die genannten Gemische milssen sich a d e r d e m noch ideal verhalten. Ohne die Begriffe ,,verdilnnt", ,,tihnlich" und ,,ideal" genauer zu definieren, kann man sagen: Erfreulicherweise sind diese Ausnahmeftille nicht gar zu selten, so dai3 man mit der simplen Theorie doch einiges anfangen kann. In der Mehrzahl der Fiille wird man aber auf die umfassenden Stefan-Maxwell-Gleichungen(SM-Gleichungen) zurilckgreifen milssen. Es wird sich in den Aufgaben herausstellen, dai3 die SM-Gleichungen etwas htjheren Rechenaufwand erfordern, dafiir aber allgemein anwendbar sind. Da die (verallgemeinerten) Fickschen Gesetze und die Stefan-Maxwell-Gleichungen in jungster Zeit in dem ausgezeichneten Buch von Taylor und Krishna [23] ausfuhrlich diskutiert wurden, kbnnen wir uns hier mit einigen weiteren Hinweisen begnilgen. Die SM-Gleichungen lassen sich auch ohne genauere Her-
270 6 Festbettreaktor
- zweiphasige Modelle
leitung verstehen; sie basieren auf der Krgftebilanz: treibende Kraft = Widerstandskraft (s. a [24]). Als treibende Kraft in Konzentrationsfeldern wirkt der Gradient des chemischen Potentials = RT, als Widerstandskraft die Reibung zwischen den Spezies; man kann ansetzen: (Reibung zwischen den Komponenten i und j pro Mol i) (Konzentration von j ) .(Geschwindigkeitsdifferenz zwischen j und i). In isothermen idealen Gemischen (y,= 1) erhalt man dann ffir die Kraftebilanz:
9
und mit
uj
=
-
2 dx, 1 =C-(xiNj dt cvaj
- xjNi)
j
&
(Dafl im Widerstandskoeffizienten der binare Diffusionskoeffizient Vij auftaucht, ergibt sich nattirlich nicht unmittelbar aus dieser simplen Modellvorstellung.) Wir schreiben die SM-Gleichungen zunschst in Matrixform: G1. (6.3) wird - zur besseren Einsicht fiber einen Zwischenschritt -
umgeschrieben mit Hilfe des MATLAB-Befehls diag in
dx
1 c
- = -(diag(x)D,N dz
- diag(N)D,x)
&.
Hierbei ist ( D r ) i j = In MATLAB lassen sich diese Matrizen sehr einfach erzeugen. Man k a die~ vektorisierte Form der SM-Gleichung noch dimensionslos machen, indem man z. B. r auf S normiert; es entsteht
&.
Die Elemente Bij kann man als SM-Stoffilbergangskoeffizienten mit (B,)ij = auffassen; in Fallen, in denen man keinen guten Wert filr 6 unabhangig ermitteln kann - und das werden die meisten sein - lassen sich ilber die Vaj aus den ublichen Kenngrilflenbeziehungen S h = f (Re,Sc) brauchbare Werte ffir die B,j erhalten ([23]).
6.1 Tkansportlimitierungen zwischen den
Phasen
271
Man kann die SM-Gleichungen ,,zur Vereinfachung " in Differenzengleichungen iiberfiihren, indem man dx durch 2 6 - xg ersetzt und x durch einen geeigneten Mittelwert, gewuhlich durch das arithmetische Mittel (26 + sg)/2. Durch eine Reihe algebraischer Manipulationen kann man die Beziehungen auch wieder auf die ,,vertraute" Form der G1. (6.1) bringen, dann allerdings mit konzentrationsabhtingigen Koeffizienten. Wir werden an Beispielen sehen, dai3 mit den ,,vereinfachten " Gleichungen numerisch gar nicht so einfach umzugehen ist; wie schon bei den Gleichgewichtsberechnungen in Abschnitt 5.5.2 bereitet auch hier das numerische Losen der DGls (SM-Gleichungen) oft weniger Probleme als das Lasen nichtlinearer Gleichungssysteme. Wenn man auch ohne tiefergehende Analyse - falls eine solche muglich ist - nicht verallgemeinern kann, besttitigt sich die hier gemachte Erfahrung bei so vielen anderen Beispielen, auch in diesem Buch, dafi man mit einiger Berechtigung von einer ,,Vereinfachung" der SM-Gleichungen abraten darf; die heutigen DG1-Loser sind so schnell und robust, dafi man ihnen den Vorzug geben sollte vor den Ltjsern fiir nichtlineare AGls. Meistens spielt der Wtlrmetransport zwischen Gas und Katalysatorkorn eine grof3ere Rolle als der Stofftransport. Auch hier folgen wir nicht unreflektiert der iiblichen Bilanz (fth eine Einzelreaktion)
aa,(T6 - T g )= T (-AH,.)
(6.7)
wobei T6 die Korn- und Tg die Gastemperatur ist, sondern machen eine Energiebilanz. Im Film gilt im stationaen Zustand d dz
-(-A-
dT dz
+
c
NiH,) = 0
oder
+
N&)6, und das ist Die Konstante C ist gleich 0, denn es ist C = (-A% die Energiebilanz fiir das Korn: Im stationtiren Zustand miissen sich die einund austretenden Energiestrbme aufheben. Es folgt:
(6.10)
wobei Cpi die mittlere Molwtirme der Komponente i zwischen und T ist: T Cpi = & Cp,dT. Bei einer Einzelreaktion ist die rechte Seite wegen Ni = k N k und Nk = & Y ~ T gleich ~ ~ ~ ( - - voder i H 'a,r~( -)A H , . ) ; T ist die Reaktionsgeschwindigkeit im Korn, T = T ( 3 , Ta), und AH,. ist die Reaktionsenthalpie bei der Referenztemperatur To. Wie die Erfahrung lehrt, herrscht
-
sTo
272 6 Festbettreaktor - zweiphasige Modeile oft erhebliche Unsicherheit, bei welchen Temperaturen einzelne Gr65en wie AH, oder einzusetzen sind; ein beliebter Fehler ist, genauer rechnen und deshalb die Temperaturabhtingigkeit der Reaktionsenthalpie beriicksichtigen zu wollen, dabei aber die falsche Bezugstemperatur zu wtihlen, htiufig die Korntemperatur. Solche und noch grbbere Fehler lassen sich vermeiden, wenn man wie hier in Zweifelsftillen Energie- bzw. Enthalpiebilanzen verwendet - und nicht ,,Wtirmebilanzen ". Wenn wir die Differentialgleichung durch eine Differenzengleichung bei der mittleren Filmtemperatur T = anntihern, wobei wir als Referenztemperatur T o die Gastemperatur Tg (bei z = 0) wtihlen, erhalten wir
cpi
(6.11)
a;
mit CY = so sehen wir den Unterschied zu dem iiblichen, zu stark vereinfachten Ansatz, der nur die Warmeleitung im Film bzw. den Warmeubergang beriicksichtigt, aber nicht die mit den Stoffstrbmen verbundenen EnthalpiestrB me; man darf vermuten, daf3 diese Vernachl2ssigung nur in Sonderfallen erlaubt ist, z. B. in verdilnnten Gasmischungen. Wenn man allerdings die Reaktionsenthalpie im Temperaturbereich zwischen Tg und T6 als konstant ansetzen darf, erhtilt man wieder den einfachen Ansatz; in diesem Fall ist ntimlich der Term NiCpi = C viCPi gleich Null. Die Transportprozesse im Film sind hier etwas ausfiihrlicher behandelt, da sie in den meisten einschltigigen Literaturstellen noch nicht in dieser Form zu finden sind. Um in einem FBR Transportwidersttinde zwischen Gas und Korn zu berucksichtigen, miissen wir ein zweiphasiges ( ,,heterogenes") Modell aufstellen. Wir beschrtinken uns zuntichst auf den externen Stofftransportwiderstand bei Einzelreaktionen in einem isothermen FBR, nicht weil das besonders praxisnah ist, sondern weil wir so wesentliche Vorgtinge herausarbeiten kbnnen; die Ausdehnung auf Mehrfachreaktionen und nichtisotherme Verhtiltnisse ist dann kein grundsatzliches Problem mehr - wenn wir von maglichen Mehrfachlosungen und damit verbundenen Stabilittitsproblemen absehen. Wir konnen die Stofiilanz fur die Gasphase in einem zweiphasigen Modell formal genau so ansetzen wie im einphasigen, mit dem inhaltlichen Unterschied, daf3 die Reaktionsgeschwindigkeit sich a d die Kornphase bezieht und damit die Kopplung herstellt:
2
(6.12) milssen wir durch Losen der Transportgleichungen im Film gewinnen (wenn wir uns weiterhin auf das Filmmodell einigen wollen), also der ShlGleichungen mit den zugehbrigen AGls (Geschwindigkeitsgleichungen und st6chiometrische Beziehungen), so wie es z. B. im Problem 6.3.1 ausgefiihrt wird. In dieser Form l a t die Stofiilanz fur die Gasphase deutlich erkennen, daf3 wir
T(X6)
6.2 'Ikansportlimitierungenin der Feststoffphase 273
alle stbchiometrischen Berechnungen aus dem einphasigen Modell ilbernehmen kbnnen, also die Berechnung von u c sowie der Molanteile der Nichtschlusselkomponenten aus denen der Schltbselkomponenten. Bei jedem Schritt des DG1-Losers ftir die Gasphase kann also - anstelle ) einphasigen Modell - ~(xg) berechnet werden: aus den SM-DGls von ~ ( x im oder iiber die SM-Differenzengleichungen durch Lbsen eines nichtlinearen AG1Systems. Die zweite Methode wird entgegen der noch in der Literatur herrschenden Ansicht nicht empfohlen (s. a. Problem 6.3.2),sie kann aber Ausgangspunkt einer anderen Lbsungsstrategie sein, ntlmlich das nichtlineare AG1-System ftir den Film in ein DG1-System zu ilberfilhren und zusammen mit der DGl fur die Gasphase zu losen (s. a. die Index-Eintrtige zu DAG1-Laser). Das ist im Problem 6.3.3 als Aufgabe formuliert.
6.2
Transportlimitierungen in der Feststoffphase
Den Transportprozessen im porbsen Korn ergeht es in den meisten Lehrbilchern nicht anders als den Transportprozessen zwischen Gas und Korn: Sie werden zu stark vereinfacht dargestellt, und die Formulierungen gelten daher nur unter sehr eingeschrbkten Bedingungen. Was aber noch bedauerlicher ist: Die Darstellungen filhren in eine Sackgasse; eine geradlinige Erweiterung auf realistische, komplexere Bedingungen ist nicht mbglich. Dabei sind seit vierzig Jahren Theorien und Modelle bekannt, die kaum grbflere Anforderungen stellen, weder an Daten noch an Rechenmethoden - das werden wir im folgenden sehen. Beginnen wir mit der ilblichen Darstellung: Wir betrachten eine Reaktion A + B , die in einem isothermen Katalysatorkorn abltluft. Die sog. effektive Reaktionsgeschwindigkeit, der Mittelwert der Reaktionsgeschwindigkeit,berechnet sich dann aus dem Konzentrationprofil von A im Korn; dieses Profil ist gegeben iiber die Bilanz fur A: ,,hderung der Diffusionsgeschwindigkeit = Verbrauchsgeschwindigkeit ". Um mbglichst einfache Beziehungen zu bekommen, wtihlen wir als Katalysatorform die sog. unendliche Platte; d. h., wir beriicksichtigen die Diffusion nur in einer Raumrichtung und vernachlbsigen Beitrtige aus anderen Richtungen. Dann ltlflt sich die obige Bilanz filr A formulieren als
(6.13) Mit dem Fickschen Gesetz filr N A , hier N A = - D i f f c % , folgt daraus bei einem als ortsunabhtlngig angenommenen effektiven Diffusionskoeffizienten in dimensionsloser Form:
(6.14) mit der Katalysatorkennzahl, oder dem Thiele-Modul, 4 = L dingungen sind: z = 0 :
9 = 0; z / L = 1 : X A = 15.
274
6 Festbettreaktor
-
zweiphasige Modelle
Von dem Problem zuntichst abgesehen, daJ man selbst in diesem einfachsten aller Fiille den Diffusionskoeffizienten Dif nur filr die Grenzfiille Knudsendiffusion oder molekulare Diffusion angeben kann, aber nicht ohne weiteres filr das Ubergangsgebiet, ist es die Fixierung auf das Ficksche Gesetz, das die Erweiterung auf andere Bedingungen vereitelt: Im Grenzfall molekularer Diffusion werden wir die SM-Gleichungen heranziehen milssen, selbst schon in bintiren Systemen, sofern sich die Molzahl bei der Reaktion Sndert; zudem entsteht bei der Diffusion in einem porbsen Medium i. a. ein Druckgradient, der nicht immer zu vernachltissigen ist. Die Probleme 6.3.4 und 6.3.5 beschtiftigen sich mit der numerischen Lbsung der vorstehenden Gleichungen filr Reaktionen erster Ordnung; dann sind die DGls linear und ihre numerischen Lbsungen kbnnen mit analytischen Ltisungen verglichen werden. Dann folgt noch eine Erweiterung auf nichtlineare Kinetik, bevor allgemeinere Transportgesetze angewendet werden sollen. Zur Einfilhrung allgemeinerer Transportgesetze betrachten wir eine Kapillare, um turbulenten Transport ausschlieflen zu ktjnnen; ,,effektive“ Parameter vermitteln die Anwendung der Beziehungen a d porbse Stoffe. Wir konnen drei Grenzftille des Stofftransports unterscheiden, sofern wir uns auf den isothermen Transport eines nichtadsorbierbaren Gasgemisches beschrtinken: Diese drei Grenzftille sind nach den heute iiblichen Bezeichungen: Knudsendiffusion, molekulare Diffusion und viskose Strbmumg. Der Grenzfall Knudsendiffusion tritt auf, wenn die mittlere freie Wegliinge der Gasmolekille grofl ist gegenilber dem Kapillardurchmesser, also bei kleinem Durchmesser oder niedrigem Druck; dann wird Impuls nur durch Stofle mit der Wand ilbertragen. Die Knudsenbeziehung lautet
(6.15) mit
(6.16) Bei langen zylindrischen Kapillaren mit Radius R ist KO 7 $R; in porosen Stoffen htingt KO von der Porenstruktur a b und mufl experimentell bestimmt werden. Die molekulare Diffusion wird durch die Stefan-Maxwell-Gleichungen beschrieben, die schon im Abschnitt 6.1 vorgestellt wurden: Die mittlere freie Weglange ist in diesem Grenzfall groa gegenilber dem Kapillardurchmesser. Allerdings kann man hier nicht von vornherein von einer isobaren Diffusion ausgehen; Experimente zeigen (s. z. B. [25]),dafl sich bei der tiquimolaren Gegendiffusion zweier Gase in einer Kapillare ein Druckgradient aufbaut:
(6.17)
6.2 Transportlimitierungen in der Feststoffphase 275
Der Impulstransport erfolgt zwischen verschiedenen Spezies, der Transport an die Wand kann vernachliksigt werden. Das kann man als den physikalischen Grund ansehen, d d nur N-1 der SM-Gleichungen f u l die N Komponenten linear unabhiingig sind und daher nur eine Aussage Uber ihre gegenseitige Diffusionsgeschwindigkeit machen, nicht aber Uber die Geschwindigkeit relativ zur Wand. Im Grenzfall isobarer molekularer Diffusion ist der effektive Diffusionskoeffizient D,.ff = D,j; in porbsen Stoffen ist er wie der effektive Knudsenkoeffizient strukturabhiingig Der dritte Grenzfall, die viskose Stremung, hat als Voraussetzung ebenfalls die Bedingung A << 4 ; er l a t sich gedanklich am besten von der molekularen Diffusion trennen, wenn nur eine einzige Gaskomponente vorliegt: Dann ist der Transport beschrieben durch
N" =
BOP dP
qRT dz
(6.18)
wobei fur eine zylindrische Kapillare vom Radius R nach Hagen-Poiseuille gilt: Bo = $; bei porbsen Stoffen ist BOein experimentell zu bestimmender Parameter, der als Permeabilitiit bezeichnet wird, die angegebene Beziehung ist als d'Arcysches Gesetz bekannt. Wie fugen sich diese drei Grenzfue fur das ubergangsgebiet zusammen? Eine einfache Annahme besteht darin, die treibenden Krgte fiir die beiden Difisionsarten wie die Spannungsabfiille in einem elektrischen Analogon hintereinanderzuschalten,
(6.19) und diffusive und viskose Strbme zu addieren:
Ni = N,"
+x ~ N "
Einsetzen von N," = Ni - XiN" und Ausdifferenzieren von verallgemeinert auf mehrdimensionalen Transport:
(6.20)
2 ergibt dann,
Die vorstehende Ableitung hat keine theoretische Basis. Es ist umso erstaunlicher, daB die Form der resultierenden Beziehung sich ftir porose Stoffe auch aus einer physikalisch gestUtzten Theorie ergibt, dem Staub-Gas-Modell' (dusty gas Nach einer neueren Literaturstelle ist im Staub-Gas-Modell (SGM) ein kleiner Fehler enthalten (s. dazu 1261).
276 6 Festbettreaktor - zweiphasige Modelie model, s. [27]). Dieses Model1 enthlilt drei Parameter: KO, Bo und zusatzlich K1 g e m u VI","= K1D,j; K1 wird ilblicherweise ausgedruckt durch die Porositlit E und einen Labyrinthfaktor (tortuosity) T : K1 = f ; mit diesen Grtjfjen kann man auch KOvon einer geraden Kapillare ilbertragen, vorausgesetzt es macht Sinn, einen mittleren Porendurchmesser dpore anzusetzen: KO = i d p o r ef - besser, aber aufwendiger, ist eine experimentelle Bestimmung. Betrachten wir der Einfachheit halber eine Einzelreaktion in einer isothermen unendlichen Platte: Dann gilt die Bilanz:
dNi =up dz
(6.22)
mit den Randbedingungen z = 0 : N , = 0; z = L : x = xo Daraus folgt filr jede Stelle z:
(6.23) Diese sttkhiometrische Beziehung erleichtert die Ltjsung des Problems ,,Transport mit Reaktion im porbsen Katalysatorkorn", also der Gln. (6.21) und (6.22), ganz erheblich. Wie man zeigen kann ([28]), ist sie auch fiir die anderen beiden geometrischen Standardformen gilltig, filr den unendlichen Zylinder und die Kugel. Ftk weitverbreitete reale Katalysatorformen wie Zylinderpellets gilt sic aber nicht streng, und auch das ilbliche Rechnen mit volumengleichen Kugeln kann nur eine Ntiherung sein. Mit der sttjchiometrischen Beziehung (6.23) lassen sich (bei einer Einzelre aktion) alle Strtjme in der SGM-Gleichung durch den Strom einer Schlilsselkomponente ausdriicken:
wobei 1 die Tkansportrichtung in den drei genannten Geometrien ist. Entsprechend ersetzen wir in der Bilanzgleichung div durch einen eindimensionalen Ausdruck:
(6.25) mit b = 0, 1 , 2 filr unendliche Platte, unendlichen Zylinder und Kugel. Damit haben wir ein DG1-System aus N + 1 Gleichunged : N - 1 filr Molanteile, eine filr den Druckgradienten sowie die Bilanzgleichung filr Nk. N ist die Anzahl der Komponenten; die indizierten Variablen N,sind Stromdichten, s. a . das Symbolverzeichnis.
6.2 lhnsportlirnitierungen in der Feststoffphase 277
Das ist ein Randwertproblem mit den Randwerten:
(6.26) (6.27) Die Gleichung fiir den Druckgradienten erhtilt man durch Summierung von G1. (6.24) iiber alle i:
(6.28) Wenn eins der besprochenen iterativen Lbsungsverfahren auf Schwierigkeiten stoi3en sollte, kann man durch eine geschickte Transformation, die auf Hugo [29] zuriickgeht (s. a. [28]), dafiir sorgen, dad dieses Gleichungssystem aufgespalten wird in eine einzige Randwert-DG1 und ein System von N Anfangswert-DGls. D a m wird eine neue Variable X Uber eine DG1 eingefiihrt:
(6.29) mit der Anfangsbedingung 1 = L : X = 0. Mit dieser Transformation wird aus der Druck-DG1 dv
C&
und aus der SGM-Gleichung, wenn man noch druck ersetzt:
(6.30)
3 durch den vorstehenden Aus-
Diese beiden Gleichungen bilden ein Anfangswert-DG1-System: X = O : x = x @ ,p = p s
(6.32)
Dessen Ldsung x(X) und p ( X ) wird benutzt, urn die transformierte Bilanzgleichung zu losen; sie lautet:
1 d ,dX --(1 -) = -RTT lb dl dl
(6.33)
278 6 Festbettreaktor - zweiphasige Modelle mit den Randbedingungen
(6.34) 1 = L:X=O
(6.35)
Deren Lbsung stellt den Zusammenhang zwischen X und 1 her; aus x(X) und p(X) entstehen so die gesuchten Profile x(Z) und p(Z).
Die voranstehenden Gleichungen kann man natiirlich auch auf eine dimensionslose Form bringen. Wir verzichten hier darauf, weil wir in den Aufgaben nur bestimmte Probleme h e n , aber keine Parameterstudien betreiben werden. Wenn wir Reaktoren berechnen und dabei den Stofftransport im Katalysator beriicksichtigen wollen, sehen wir uns einem nicht mehr ganz trivialen Rechenproblem gegenilber. Die effizienteste Methode diirfte sein, die Korngleichungen zu diskretisieren, vorzugsweise mit der OK, und das so erhaltene DAG1-System mit einem DAG1-Lbser zu lbsen. Die weiter oben vorgestellte Methode, das DAG1-System in ein DG1-System zu verwandeln, kann man natiirlich auch verwenden; allerdings durfte die Ableitung der Jacobi-Matrix doch schon recht aufwendig werden - aus den oben erwahnten spezifischen Unvollkommenheiten von MATLAB, MAPLE und Windows. Wer bfter und fiir wechselnde Aufgaben Jacobi-Matrizen benutigt, wird sich ein allgemein anwendbares MATLABProgramm schreiben (oder besorgen). Fur einzelne Aufgaben lohnt sich eine Ad-hoc-Lbsung kaum; man wird ausweichen und die Korngleichungen bei jedem Lbsungsschritt fUr die Reaktorgleichungen losen. Das bietet sich besonders an, wenn 0
0
0
man schon allgemeine UPS fur die Lbsung der Korngleichungen geschrieben hat; nur eine Einzelreaktion vorliegt, weil man dann nur eine einzige RandwertDG1 lbsen m d ; die Konzentrationsprofile im Korn nicht zu steil sind, sodail man mit wenigen Kollokationsstellen auskommt.
Auf die Probleme fur diesen Abschnitt werden diese Voraussetzungen zutreffen.
6.3 Probleme und Ldsungen
279
Probleme und Losungen
6.3 6.3.1
Konzentrationsprofile zwischen Gas und Katalysatorkorn nach der Filmtheorie bei einer Reaktion vom Typ A 4 B + C mit Hilfe der SM-Gleichungen (*)
Die erforderlichen Daten stehen in der Datei CHQCHODAT (in Anlehnung an eine Aufgabe in [30] ilber die Dehydrierung von Ethanol zu Acetaldehyd). Losungsvorschlag
In den Bilanzgleichungen treten sechs abhlingige Variable auf: i = 1...3. Wir beniitigen also sechs Gleichungen; diese sind: 0
0
Ni und xi fur
zwei SM-Gleichungen (die dritte ist nicht mehr unabhtingig!) eine Geschwindigkeitsgleichung: Kornoberfltiche
Nl= k,cxl(z
0
zwei stochiometrische Beziehungen:
0
die ,,Schlieflbedingung" C zi = 1.
= 6 ) , also an der tideren
2 = 2 ftir i = 2...3
Die Liisungsstrategie besteht darin, N1 und X ~ ( Z= 6) aufeinander abzustimmen. Man wtihlt einen Wert filr zl(z = 6): Daraus folgen Ni aus der Geschwindigkeitsgleichung und die beiden anderen N, aus den stochiometrischen Beziehungen; durch Integration der beiden SM-Gleichungen erhalt man zwei z i ( z = 6)-Werte und den dritten aus der SchlieBbedingung. Der so erhaltene 2 1 ( 2 = 6)-Wert muB mit dem vorgegebenen Ubereinstimmen, andernfalls wird ein neuer Wert gewtihlt und der Rechenablauf wiederholt; dieses Iterieren ilberl a t man am besten einem Optimierprogramm, so wie es im folgenden gezeigt wird. Die folgenden hnktionsaufrufe erzeugen die Losung: ch3chodat xldelta=leastsq('ch3chols',.5)% xldelta =
fmins statt leastsq fiir SE
0.0977 Nl=kr*c*xldelta N1 = 0.9646 [z,y]=ode45('ch3chokin',[O l],x120); plot(z,y,z,l-sum(y')) hold Current plot held plot(z,(y(2,l)-y(l,l))/(z(2)-z(l))*z+y(1,l),'r-') %Tangente an zlin z = 0
280 6 Festbettreaktor - zweiphasige Modelle
Abbildung 6.1: Konzentrationsverlauf im Film. - A, - - B, . . C, -.-. Tangente an A in z = 0. +
Das Ergebnis ist in Abb. 6.1 zu sehen. Betrachten wir die Files im einzelnen: C H 3C H 0 DA T
global xldelta kr c NiNj betar x120 N beta( 1,2)=0.07; beta( 1,3)=0.23;
beta(2,3)=0,23;%beta:=D/delta [ze,sp]=size(beta); %Erzeuge die Matrix l 3 , yo******************** E=[beta;zeros( 1,s p)] ' ; betaz=[beta+E( l:ze,:);E(sp,:)]; betaz( l:sp+l:sp*sp)=l;%Vermeide
Division durch Null
betar=ones(sp,sp)./betaz;
betar( l:sp+ l:sp*sp)=O;
yo******************** kr=0.45;%Geschwindigkeitskonstante x120=[0.7;0.15];%~~und xg, Molanteile in der Gasphase (bei z = 0) N( 1)=-1;Ni Nj=[1;-1;-11;%vj und v,/ vj p=le05;T=548; RG=8.314; c=p/RG/T;
6.3 Probleme und Ltlsungen
281
CH3CHOLS
function f = ch3chols(x) global xldelta kr c NiNj betar x120 xldelta=x; [z,y]=ode45(’ch3chokin’,[O l],x120); f=y(size(y,l),l)-xldelta; f=fcf’;% fur SE Die Wahl der Zielfunktion f in CH3CHOLS geschieht hier der Einfachheit halber; sie ist nicht zu verallgemeinern. Das wird sofort klar, wenn man eine Geschwindigkeitsgleichung annimmt, in der die Konzentrationen mehrerer Komponenten auftauchen, oder wenn man Mehrfachreaktionen vorliegen hat. Im allgemeinen Fall sollte man die Stoffstrbme der sttichiometrischen Schliisselkomponenten als Optimiervariable wtlhlen. CH3CHOKIN
function dx = ch3chokin(z.x) global xldelta kr c Ni Nj betar x120 Ix=length(x); x(lx+l)=l-sum(x); Nl=kr*c*xldelta; N=Nl*NiNj; dx=l/c*(x. *( betar*N)-N.*(betar*x)); dx=dx( 1:lx);
6.3.2
Konzentrationsdifferenzenzwischen Gas und Katalysatorkorn nach der Filmtheorie bei einer Reaktion vom Typ A --+B C mit Hilfe der SM-Gleichungen (*)
+
Daten wie in Problem 6.3.1, s. CHQCHODAT, auch wegen der Symbole. Die Konzentrationsprofile zwischen Gas und Katalysatorkorn interessieren i. a. weniger; gewiinscht sind die Stoffstrbme, und die kann man zur Vereinfachung auch proportional zu den Konzentrationsdifferenzen zwischen Gas und Korn ansetzen. Allerdings verschiebt man dabei die brtliche Abhtingigkeit der Konzentrationen im Film, wie sie im voranstehenden Problem berechnet wird, in eine Konzentrationsabhtingigkeit der Proportionalittitsfaktoren. Losungsvorschlag
Wir beschranken uns hier darauf, die SM-Gleichungen in Differenzenform zu verwenden, so wie es im Text skizziert wurde, und unterlassen weitere algebraische Manipulationen. Wir erhalten dann ein nichtlineares Gleichungssystem von sechs Gleichungen entsprechend dem Ltisungsweg im voranstehenden Problem,
282 6 Festbettreaktor - zweiphasige Modelle nur sind die beiden SM-Differentialgleichungen durch zwei algebraische Gleichungen ersetzt. Das File CH3CHOG zeigt diese Gleichungen des Gleichungssystems g(x,y)= 0 als Strings:
CH3CHOG global g global y l y2 y3 y4 y5 y6 global x l x2 x3 global xldelta kr c NiNj b betar x120 N gl='yl-xl-l/c*( (xl+yl)/2*(y5*betar( 1,2)+y6*betar( 1,3))-y4/2'; gl=[gl,'*((x2+~2)*betar(l,2)+(~3+~3)*betar( 1,3)))']; g2='y2-x2-l/c*( (x2+y2)/2*(y4*betar( 2,l)+y6* betar(2,3))-y5/2'; g2=[g2,'*( (xl+yl)*betar(2,1)+(~3+y3)*betar(2,3)))']; g3='y5-Ni Nj( 2)*y4'; g4='y6-Ni Nj(3)*y4'; g5='y4+N (1)*kr*c*yl'; g6='yl+y2+~3-1'; g=gl; g=str2rnat(g,g2); g=str2rnat(g,g3); g=str2rnat(g,g4); g=str2mat(g,g5); g=str2rnat(g,g6);
Hierbei sind 51 bis z3 die Molanteile in der Gasphase, y1 bis y3 die Molanteile am Korn und y4 bis y6 die Stoffstrome Nl bis N3. Warum wurden diese Variablen nicht zu Vektoren x und y zusammengezogen? Das wtire sehr gut moglich gewesen und bei grbaeren Systemen auch geschehen. Es unterblieb aus Bequemlichkeit, weil die hier gewghlte Formulierung schon vorausgreift: Bei der Berechnung von Jacobi-Matrizen, die wir im Problem 6.3.3 benbtigen, konnen wir keine Vektorelemente gebrauchen, und die Umwandlung macht in diesem Fall etwas mehr Arbeit als der Umgang mit den wenigen Einzelvariablen. Ebenso wurde darauf verzichtet, die Matrix g in einer Schleife aufzubauen. Die Losungsstrategie ist folgende: 1. Wir sollten im Prinzip einen Wert far den Stoffstrom y4 wtihlen; da diese Wahl am einfachsten ilber y1 nach g5 erfolgt, konnen wir auch gleich mit einem Schtitzwert filr y1 starten.
2. Wir berechnen die anderen Stoffstrome aus g3 und g4.
3. Dann lbsen wir die Gleichungen g l und g2 simultan mit fsolue. 4. Die mit dem letzten Schritt ermittelten Werte fiir y2 und y3 mussen zusamen mit dem Anfangsschiitzwert y1 die Schlieabedingung g6 erfiillen. 1st das nicht der Fall, mua mit einem verbesserten Schtitzwert far y1 wieder bei 1. begonnen werden; die Verbesserung iiberlassen wir wie gewohnt
6.3 Probleme und Ltlsungen 283
einem Optimierprogramm, z. B. ebenfalls fsolwe. Filr SE sind die im folgenden angegebenen Programme so modifiziert, da% fmins statt fsolwe verwendet werden kann. Die Steuerung des Programmablaufs ilbernimmt das Programm fiber fsolwe aufgerufen wird:
CHkHOST,
das
CH3CHOST function yrn = ch3chost(x) global g global y l y2 y3 y4 y5 y6 global xldelta kr c NiNj b betar x120 N global x l x2 x3 yl=x;
y4=-N( l)*kr*c*yl; y5=NiNj(2)*y4; y6=NiNj(3)*y4; y23=fsolve( 'ch3chg12',[(l-y1)/2, (l-y1)/2]); y2=y23 (l);y3=y23( 2); ym =y 1+y2+y3- 1;
FUr den 3. Schritt wird in Zeile 10 dieses Programms CH3CHG12 aufgerufen: CH3CHG12 function yrn = ch3chgl2(x) global g global y l y2 y3 y4 y5 y6 global xldelta kr c NiNj b betar x120 N global x l x2 x3 y2=x( l);y3=x(2); ym=[eval(g( l,:));eval(g(2,:))];
Wir k6nnen nun die Lbsung mit wenigen Aufrufen gewinnen: ch3chodat ch3chog x1=.7;x2=0.15;x3=0.15; y l=fsolve( 'ch3chost',O. l ) % h i n s fur yl = 0.0971 Y4
SE
y4 =
0.9592
Der Vergleich mit den Ergebnissen der vorigen Aufgabe zeigt - in Anbetracht der Unsicherheiten in den P-Werten - keinen nennenswerten Unterschied. Zur
284 6 Festbettreaktor - zweiphasige Modelle Vorsicht mahnt aber der Versuch, die Startwerte zu varieren: Mit y1 = 0.2 und 0.3 erhalt man noch dieselben Ergebnisse; aber schon mit 0.4 landet man bei dem unsinnigen Wert von -2.0004, begleitet von gebtihrenden Hinweisen auf eine schlecht konditionierte Matrix. Die Verwendung der SM-DGls in der vorigen Aufgabe erweist sich als sehr vie1 robuster, was den Konvergenzbereich des Anfangsschtitzwertes angeht. (Versuchen Sie, dort einen ahnlichen Absturz herbeizuftihren!) Ahnlich robust ist auch fmins, allerdings langsamer!
6.3.3
Isothermer eindimensionaler FBR mit externem Stofftransportwiderstand (DAGI-System) (**, nicht SE)
Die schon in den beiden vorhergehenden Problemen benutzte Reaktion A + B C soll in einem isothermen FBR ablaufen, der als eindimensional modelliert werden kann; zu beriicksichtigen ist der Stofftransportwiderstand Gas-Korn. Daten und Symbole wurden aus CH3CHODAT iibernommen und um die benbtigten zustitzlichen Angaben im File CHOFBRDAT enveitert. Berechnet werden sollen die Konzentrationsprofile im Reaktor und im Film.
+
Losungsvorschlag Im Text sind drei Moglichkeiten angegeben, diese Aufgabe anzugehen:
1. Bei jedem Schritt des DG1-Losers fur die Gasphasenbilanz werden im Film die SM-DGls mit den zugehbrigen linearen AGls iterativ gelbst. 2. Wie l., nur werden die SM-Differenzengleichungen benutzt, so dafi ein nichtlineares AG1-System gelost werden mu0.
3. Das nichtlineare AG1-System fiir den Film wird in ein DG1-System iibergefiihrt und zusammen mit der DG1 fur die Gasphase gelbst. (Ab der Version 5.3 konnte auch MATLABs DAGI-Lbser verwendet werden; ein Beispiel findet sich im Problem 4.4.4.) Die Wege 1. und 2. erfordern nur, die Rechnungen der Probleme 6.3.1 und 6.3.2 in das UP fiir den DG1-Loser einzubauen, bei umfangreicheren Gleichungssystemen als UPS. Die dritte Methode soll in diesem Problem erarbeitet werden. Zuniichst das Gleichungssystem, in dem sich der Index 1auf die Komponente A bezieht:
(6.36)
6.3 Probleme und Losungen
285
(6.38)
N2 = -N1
(6.40)
N3 = -r?1
(6.41)
1 - xy u c = uoco1 - x1
(6.42)
(6.43)
53
= 1- 2 1 - x2
(6.44)
Wenn wir keinen externen DAGl-Laser verwenden wollen, ktrnnen wir im Prinzip genau so vorgehen, wie das im Problem 4.4.3 gezeigt wurde. Hier ist es allerdings wesentlich aufwendiger, die Jacobi-Matrizen fiir das AG1-System zu berechnen; wir sollten das mit Hilfe von MAPLE, also innerhalb MATLABs mit der Symbolic Math Toolbox bewerkstelligen. Dabei miissen wir leider einige Unvollkommenheiten in MATLAB, MAPLE und Windows beriicksichtigen: In der Grundversion der Symbolic Math Toolbox werden im Befehl jawbian keine indizierten Variablen angenomment, und MAPLE selbst, dessen Syntax in der Extended Symbolic Math Toolbox verwendet werden kann, benutzt statt runder Klammern leider eckige. So kommen wir ohne einige Umwege nicht aus. Die AGls des Films werden - nach einiger Vereinfachung, s. weiter unten gleich im MATLAB-Code vorgestellt; zuvor das Datenfile:
286
6 Festbettreaktor - zweiphasige Modelle
CHOFBRDAT
1. global kr c betar NNS NNR L u0 sST sRT uOc0 x0 epsG av 2. beta( 1,2)=0.07; beta(1,3)=0.23; 3. beta(2,3)=0.23;%beta:=D/delta 4. [ze,sp]=size( beta); 5. E=[beta;zeros( l,sp)]';
6. betaz=[beta+E(l:ze,:);E(sp,:)]; 7. betaz(l:sp+l:sp*sp)=l;
8. betar=ones(sp,sp)./betaz; 9. betar(l:sp+l:sp*sp)=O; 10. kr=0.45; 11. p=le05;T=548; RG=8.314; 12. c=p/RG/T; 13. NNS=[l;-l;-l]; 14. NNR=-NNS; 15. sST=surn(NNS);sRT=sum( NNR);
16. av= le03; 17. epsG=0.4; 18. L=.5;~0=1; 19. uoco=uo*c;
20.
xo=p;o;o];
Die ersten 12 Zeilen sind aus dem File CH3CHODAT iibernommen. Dann folgen in 13 und 14 die sttichiometrische und die Reaktionsmatrix fiir die Gasphase, ebenso wie Zeile 15 nach dem bewghrten allgemeinen Schema. Zeilen 16 bis 21 enthalten die Angaben fiir den Reaktor. CHO FBRG
1. global g gyj gxj 2. global y l y2 N1 3. global x l x2
6.3 Probleme und Losungen
287
4. global kr c betar NNS NNR L u0 sST sRT uOc0 x0 epsG av 5. gl='yl-xl-l/c*((xl+y1)/2*(NNS(2)*N1*betar(l,2)+
...
NNS(3)* N1*betar( 1,3))-N 1/2'; 6. gl= [gl
,I*(
(x2+y2)* betar( 1,2)+ (l-xl-x2+ 1-yl-y2) * betar( 1,3)))'];
7. g2='y2-x2-l/c*( (x2+y2)/2*( Nl*betar(2,1)+.
..
NNS(3)*Nl*betar(2,3))-NNS(2)*N1/2'; 8. g2=[g2,'*( (xl+yl)*betar(2,1)+( l-xl-x2+1-yl-y2)*betar(2,3)))']; 9. g3='Nl+NNR(l)*kr*c*yl'; 10. ~ ~ = ' u c - u O C O * ( l-sST*xO( 1))/( l-sST*xl)'; 11. g5='x2-( uOcO*x0(2)+N NS(2)*( uc*x1-~0~0*xO( l)))/uc';
12. syms y l y2 N1 x l x2 uc
13. vy=[x2,yl,y2,Nl
UC];
14. for i = 1:s 15. eval(['gxj',num2str(i),'=jacobian(g',num2str(i),',xl);']) 16. eval(['gyj',num2str(i),'=jacobian(g',num2str(i),',vy);']) 17. end
18. gxj=gxj 1;gyj=gyj 1; 19. for i = 2 5 20. eval ( ['gxj= [gxj;gxj', num2str(i ) ,'1 ;'I)
'I)
21. eval ( ['gyj= [gyj;gyj num2str(i) ,'1 ; I,
22. end
Die AGls wurden etwas reduziert: Nz und N3 wurden durch N1 ausgedriickt und 2 3 und 2 3 6 durch die jeweiligen anderen beiden Molanteile (die x6 sind im File mit y bezeichnet). Eine weitere Reduzierung wgre liber die Beziehung N1 = k,cx 16 moglich gewesen; da aber Geschwindigkeitsgleichungenkomplizierter sein konnen, wurde darauf verzichtet, hier den speziellen Vorteil auszunutzen. Ab Zeile 12 werden die Jacobi-Matrizen der AGls symbolisch berechnet, mit deren Hilfe die AGls in DGls umgewandelt werden kbnnen. Leider gelingt es nicht, symbolisch die Inverse von gy(= zu bilden; ab einer MatrixgroBe von 5 x 5 (abhsngig von der SpeichergrdOe) versagt die Invertierung. (Nach Angaben der Mathworks Inc. tritt dieser Fehler nur auf Windows-Rechnern a d , nicht a d Unix- oder Mac-Systemen.) Wir miissen daher die Jacobi-Matrizen g, und g,
3)
288 6 Festbettreaktor - zweiphasige Modelle bei jedem Schritt des DG1-Ltjsers auswerten und g, numerisch invertieren, wie es das File CHOFBRKIN in den Zeilen 8 bis 10 zeigt: CHOFBRKIN
1. function dxy = chofbrkin(t,xy)
2. global kr c betar NNS NNR L u0 sST sRT uOc0 x0 epsG av
3. global g gxj gyj 4. xl=xy(l);x2=xy(2);
5. yl=xy( 3 ) ; y 2 = ~ (4); Nl=xy( 5) ;UC=XY( 6); 6. r=kr*c*yl*av*( 1-epsG);
7. dxy(l)=L/uc*( NNR(1)-xl*sRT)*r; 8. gxn=double(eval(gxj)); 9. gyn=double(eval(gyj)); 10. gyninv=inv(gyn); 11. dxy(2:6)=-gyninv*gxn*dxy(
1);
12. dxy=dxy’;
Um die Berechnung der Konzentrationsprofile ftir die Gas- und die Katalysatorphase im Reaktor zu starten, ben6tigen wir einen konsistenten Satz von Anfangsbedingungen. Den erzeugen wir durch Ltjsen der Filmgleichungen wie in den beiden vorhergehenden Problemen, so wie es das ilbergeordnete Steuerungsprogramm C H ~ S T A R Tzeigt: C HOSTART
clear all
ch3chodat ch3chog c hofbrdat yl=leastsq(’ch3choIs’, .5); x1=1;x2=0;x3=0; yl=fsolve( ‘ch3chost’,yl);
xyo=[x1;x2;yl;y2;y4;uoco]; c hofbrdat chofbrg [z,y]=odel5s(’chofbrkin’,[O l],xyO);
Man ltist also zungchst wegen der besseren Konvergenzeigenschaften die SMDGls; mit dem berechneten Wert (yl) fur die Konzentration am Katalysator als
6.3 Problerne und Ltrsungen
289
Anfangsschgtzwert diirfte es keine Schwierigkeiten geben, das nichtlineare AG1System der SM-Differenzengleichungenzu Idsen, um den gewiinschten konsistenten Satz von Anfangsbedingungen (xy0 in Zeile 8) filr die Reaktorgleichungen aufstellen zu kbnnen.
6.3.4
Konzentrationsprofil und Nutzungsgrad fur eine heterogen-katalytische Reaktion A -+ B erster Ordnung in A (**, SE bedingt)
Numerische und analytische Lbsung fiir planare Geometrie. Der Sinn dieser Aufgabe ist, G1. (6.14) numerisch zu h e n , als Vorubung fur komplexere Transportgesetze oder Geschwindigkeitsgleichungen;zur Kontrolle kann die analytische Lasung dienen.
Losungsvorschlag Die analytische Lbsung kann man in vielen Lehrbtkhern finden: Es ist C A = > c* , 77 = Als numerisches Verfahren kommen in Rage: SchuBverfahren, Mehrzielmethode, FVM oder OK. Vorgestellt wird zuerst die OK, dann kurz die Mehrzielmethode; wer mdchte, kann nattirlich auch die beiden anderen Methoden testen.
y.
Orthogonale Kollokation Die diskretisierten Gleichungen bilden ein lineares AG1-System und man kann es auch so behandeln; wir blicken aber auf die Falle mit nichtlinearer Kinetik und Idsen es mit einem entsprechenden Programm fur nichtlineare AGls, hier mit fsolve. Das UP besteht im wesentlichen aus dem kodierten AG1-System: POREFSOL
function f = porefsol(x) global B phiq xa xs N xa=[x;xs]; f=B( 1:N,1:N+ 1)*xa-p hiq*x;
f=frf’;%fur SE Aufgerufen wird es von einem Steuerprogramm, das die KollokationsmatriZen zur Verfiigung stellt, den Nutzungsgrad berechnet und ein weiteres Programm aufruft: POREPROF liefert das Konzentrationsprofil im Korn. Wer iiber die erweiterte symbolische Toolbox nicht verfiigt und auch nicht iiber MAPLE oder ein anderes Programmpaket fUr symbolische Rechnungen, kann die Nullstellen xj der Polynome in JACOBI-NULL.MAT benutzen; sie sind fur 1 bis 8 Stutzstellen fur die drei iiblichen Geometrien angegeben; die Zuordnung dilrfte selbsterklsrend sein: xjzyl2 z. B. sind die beiden Nullstellen des Polynoms zweiten Grades nach G1. (5.106) fUr Zylindergeometrie.
290 6 Festbettreaktor - zweiphasige Modelle PORESTEU
%A B Q W Kollokationsmatrizen; phiq Thiele-Modul phi zum Quadrat; xa Molanteile a n den Kollokationsstellen im Korn einschliei3lich xs; xs Molanteil an der 8ui3eren Kornoberflache; N Anzahl der Kollokationsstellen; x0 Molanteil im KornzentrumOJo global B phiq xa xs N N=6;phi=3;xs=l; %a=l; b=O;%Platte a = l ; b=2;%Kugel xj=oknullsy(N,a,b);%oder xj aus JACOBI-NULL.MAT zuweisen [A,B,Q,W]=orth kol(xj, b,a+l); phiq=phiA2; Qi=inv(Q); x=fsolve(' porefsol',xj*xs); %Als Schatzprofil wird mit xj * xs einfach eine Gerade zwischen 0 und c> gewahlt. fmins statt fsolve filr SE% xa=[x;xs]; xO=Qi ( 1 , l : N+l)*xa; xg= [xO;xa] ; %etaok=W*xa/xs;%Platte etaok=3* W*xa/xs;%Kugel %etaphi=tanh( phi)/phi;%Platte eta phi=3/p hiq*( phi*cot h(p hi)- 1);%Kugel poreprof POREPROF
x1=0:0.01:1; XOl=ones( N+ l , l ) * x l ;
il=l:N+1;11=il'*ones(l,ler,gth(xl)); x=xo1.A(2*11-2); xpore=[Qi*xa]'*X;'%Konzentrationsprofil an den Stellen x l
Mit diesen Programmen kann man nun ein wenig herumspielen und z. B. testen, wie groi3 man den Thiele-Modul machen kann oder wie viele Kollokationspunkte sinnvoll sind.
Mehrzielmethode (nicht fur SE) Das Lbsungsverfahren folgt dem Beispiel im Abschnitt 5.2.3 ilber das Bulirsch'sche Randwertproblem; die dortigen Programme MEZIEL2 und BOCKFUN haben hier ihre Gegenstilcke MEZIELl und PORFUN.
global tfvek thiele thiele=3; meziell
XO=[my*tfvek+yll,my*ones(2,1)];%Als Anfangstrajektorie wird eine Gerade angenommen; my, tfvek und yll wurden in MEZIEL~ besetzt.% XO=[l,my;XO];
6.3 Probleme und Losungen
291
X=fsolve( ’porfun ’ ,XO) ; X X = 1.0000e+000 -2.9852e+000 1.3373e-001 -2.6864e-001 9.9328e-002 9.8467e-009
Zum Vergleich die analytische Lbsung fur den Molanteil an den Stiitzstellen: x=cosh (thiele*( 1-tfvek))/cosh (t hiele) x =
1.3373e-001 9.9328e-002
Das Profil im Korn (Abb. 6.2) ktrnnen wir jetzt durch Integration von Stiitzpunkt zu Stiitzpunkt gewinnen:
-
.
4
’
1 1.2
I
0.5
Z/L
1
.5
Abbildung 6.2: Konzentrationsprofil im porusen Katalysatorkorn mit der Mehrzielmethode.
Das Programm dam: PORE-PROFIL
tf=O;iz=l;tv=[];yv=[; while tf < 1 tO=tf;tf=tfvek(iz); xO=[X(iz, l),X(iz,2)];
292 6 Festbettreaktor - zweiphasige Modelle [t,y]=ode45(' pordif' ,[tO,tf] ,xO); t v =[t v ;t]; yv=[Yv;y]; iz=iz+l; end
6.3.5 Reaktion erster Ordnung A mit Porendiffusion (**)
-+
B im isothermen FBR
Dies ist kaum ein realistisches Problem, sondern der denkbar einfachste Fall einer diffusionsgehemmten Reaktion in einem Festbettreaktor. Sinn der Aufgabe ist, die numerische Behandlung zu iiben und die numerischen Ergebnisse rnit der analytischen Lbsung zu vergleichen. Wie in den Aufgaben vorher stehen wiederum mehrere Lbsungsmethoden zur Wahl: entweder bei jedem Rechenschritt des DG1-Losers fiir die Gasphase Lbsung der Gleichungen fiir die Katalysatorphase, z. B. mit Schu5verfahre1-1, Mehrzielmethode, FVM oder OK, oder aber gemeinsame Behandlung als DAG1-System. Wir wiihlen zuniichst die letzgenannte Moglichkeit, diskretisieren die Katalysatorgleichungen mit Hilfe der OK und uberfuhren sie in DGls, um sie einschliefllich der Reaktorgleichung rnit einem steifen DG1-L6ser zu Itisen. Als zweite Methode lbsen wir die Katalysatorgleichungen bei jedem Schritt in der Gasphase, ebenfalls mit der OK; es diirfte interessant sein, die Rechenzeiten zu vergleichen. Die Parameter des Problems sollen angemessen gewghlt werden. Losungsvorschlag PORFBRST
bereitet die Berechnung eines isothermen FBR rnit Porendiffusion
vor. PORFBRST
%A B Q W Kollokationsmatrizen; phiq Thiele-Modul phi zum Quadrat; x Molanteile a n den Kollokationsstellen im Korn; xa: x und xs; xs Molanteil an der iiu5eren Kornoberfliiche; N Anzahl der Kollokationsstellen; x0 Molanteil im Kornzentrum% global phiq N gyi gx W Luc kr global xa B xs; N=8;phi=3;xs=l; a= 1;b=O; %planar xj=oknullsy(N,a,b);%Bei SE aus JACOBI-NULL.MAT [A,B,Q,W]=ort hkol (xj,0,2); phiq=phi -2;
6.3 Probleme und Lasungen
293
......................................................... %Jacobi-Matrizen fflr die Uberfflhrung der Kollokationsgleichungen in DGls gy=B( 1:N,1:Nf-eye(N)*phiq; gyi=inv(gy); gx=B( 1:N,N+l);
........................................................ Luc=1;%L/(u0c0) kr=l;%Geschwindigkeitskonstante
x=fsolve(' porefsol',xj*xs); xa =[x;xs]; %poresteu %(Mit PORESTEU kann man nach entsprechender Edierung das Konzentrationsprofil berechnen.)% Zwischen den folgenden Aufrufen der DG1-Loser muB jeweils PORFBRST erneut gestartet werden, da der Vektor xa geiindert wird! [zok,xok]=ode15s('porfbr2',[0 11,~s);%lost bei jedem Schritt die Katalysa-
torgl. mit OK% [zdagl,xdagl]=odel5s('porfbr',[O l],xa); %Behandlung als DAGl; xa ist das
Profil im Korn bei z=O.% Analytische Losung fflr den Molanteil am Ausgang zum Vergleich: xe = exp(-Luc*kr*tanh(phi)/phi);
6.3.6
Reaktion erster Ordnung A --+ B im porosen Katalysatorkorn nach dem Staub-Gas-Model1 (**)
= k c x A . Die Parameterwerte stehen in der Datei PORLAMB. Sinn dieser Aufgabe ist es, den Formelapparat des SGMs handhaben zu lernen.
T
Losungsvorschlag Wenn nur zwei Isomere vorhanden sind (also auch kein Inertgas), kann sich kein Druckgradient entwickeln; das zeigt formal auch G1. (6.30). G1. (6.31) vereinfacht sich zu
(6.46) Die rechte Seite gibt den effektiven Diffusionskoeffizienten D e f f fflr ein bingres System im Ubergangsgebiet zwischen Knudsen- und molekularer Diffusion an;
294 6 Festbettreaktor - zweiphasige Modelle dieser Zusammenhang wird in der Literatur auch als Bosanquet-Beziehung bezeichnet. G1. (6.33) wird zu
d2X = -RTT
(=
-~PZA)
d12
(6.47)
Diese Gleichung losen wir mit der OK-Methode, die Gleichung davor mit einem DG1-Lbser. Wenn wir dann noch die Reaktionsgeschwindigkeit iiber ein eigenes U P berechnen, haben wir die Programmstruktur, die auch fiir kompliziertere Falle geeignet ist. Die nachstehenden Dateien enthalten auch spezifische Ansatze fur das vorliegende Ubungsbeispiel in Form von Kommentarzeilen. (Eine analytische Lbsung .,(A) nach G1. (6.46) kann hier und bei komplizierteren Problemen benutzt werden, um Startwerte fur X an den Kollokationsstellen zu finden.) PORLAMB
global p T k DefF xs L Lq RG global xa A B xs N RG=8.314;%m3 Pa/mol/K p= le5;%Pa T=673;%K k=5.5e-Ol;%l/s DefF=le-O6;%m2/s L=0.005;%m Lq=LA2; phi=L*sqrt( k/DefF); phiq=phi^2; %Die OK-Matrizen werden berechnet******************** N= ~ ; x s =1; a = l ; b=O;%Platte %a=l;b=2;%Kugel xj=oknullsy(N,a,b);%Bei SE aus JACOBI-NJLL.MAT [A,B,Q,W] =ort hkol(xj ,b,a+ 1); Qi=inv(Q); q1o***************************************************
%Die mit OK diskretisierte G1. (6.47), hier linear, i. a. nichtlinear, wird mit einem entsprechenden Lbser (fsolve) gelost. Bei jedem Schritt des Losers wird die DG1 (6.46) gelost, wie aus dem UP PORLASOL hervorgeht, um die zu den augenblicklichen A-Werten gehorenden Konzentrationswerte zu bekommen.% lambdaO=xs*(ones(N, 1)-xj)*p*DefF;%Startwerte fiir X lambda=fsolve('porlasol',lambdaO);
%x=xs-lambda/p/DefF; %Mit dem konvergierten X(1) werden die Konzentrationswerte (Molanteile) x(X) berechnet% ......................................................
[la,xla]=ode45('porladgl',[O max(lambda)],xs);
6.3 Probleme und L6sungen
295
x=interpl( la,xla,lambda,'spline');
~o***************************************************
%und um die iiui3eren Werte erglinzt.******************** xa= [x;xs] ; xO=Qi( 1 , l :N+l)*xa; xg=[xO;xa];
.....................................................
% D a m wird der Nutzungsgrad berechnet (und hier mit der analytischen Losung verglichen) % ...................................................... etaok=W*xa/xs;%Platte %etaok=3*W*xa/xs;%Kugel etaphi=tanh(phi)/phi;%Platte
%etaphi=3/p hiq*( phi*coth( phi)-1);% Kugel
~o*************************************************** PORLASOL
function f = porlasol(1ambda) global p T k Deff xs L Lq RG global xa A B xs N lambdaNl=[lambda;O]; %xA=xs-lam bdaNl/p/Deff %f=B*lambdaN1+LA2*k*p*xA; [la ,xla]=ode45(' porladgl', [0 max(lambda)] ,xs); xA=interpl( la,xla,lambda,'spline'); r=porla ki n (xA,T,p); f=B*lambdaNl+Lq*RG*T*r; PORLADGL
function dxA=porladgl(la,xA) global p T k Deff xs L Lq RG global xa A B xs N dxA=-l/p/Deff; PORLAKIN
function r = porlakin(xA,T,p) global k Deffxs L Lq RG global xa A 6 xs N r=k*p/RG/T*[xA;xs];
296
6 Festbettreaktor - zweiphasige ModeJJe
6.3.7
Reaktion A 2 B + C mit LH-Kinetik im porosen Katalysatorkorn nach dem Staub-Gas-Model1 (***)
Daten: p=le5 Pa T=548 K
Ek,, =-4e4 Jlmol Ekt,=-3e4 J/mol E k c =-2e4 J/mol; ko=0.55 exp(Ek/R/T) s-l k ~ C = 0 . 3exp(Ek,/R/T) k B C = l exp( E k f l / R/ T ) kcc=0.1 exp(Ekc/R/T) c=p/R/T AH=7e4 J/mol Kz,=3 exp(AH/R/T) MG=[46,44,2] g/mol%Molmassen Rpore=1OOe-09 m%Porenradius D(A,B)=2.5e-05 m2/s%Diffusionskoeffizient D(A,C)=14e-05 m2/s D(B,C)=15e-05 m2/s E / T = O . l%Porositiit/Labyrinthfaktor 7=1.5e-05 kg/m/s%Gas-Viskositiit Rp=0.005 m%Kornradius z,=[l 0 O]%Molanteile an der auBeren Kornoberfliiche
Losungsvorschlag Die Daten sind in das File CCODAT eingearbeitet. Filr die SE ist fsolve durch fmins ersetzt mit den erforderlichen weiteren Anderungen im UP CCOSOL; auBerdem werden die OK-Stiitzstellen nicht ilber OKXULLSY berechnet, sondern aus dem File JACOBI-NULL.MAT eingelesen. CCODAT
global p TO k Deff xs L Lq RG global xa A B xs N global ps T xs Lq RG B n k l global NS nk n k l DKneff Deffr BO eta global kcO KxO kAcO kBcO kCcO Nk global delh Ek EkA EkB EkC global xs n k l ps Bk Lq RG T Rp %A=B+C nk=3; nkl=n k- 1; NS=[-l; 1;1];NR=NS;
6.3 Probleme und L6sungen
nue=sum( NS); RG=8.314;%m3 Pa/mol/K ps=le5;%Pa TO=548;T=TO;%K c= ps/ RG/T; %mol/ m3 %r=kc*( xA-xB*xC/Kx)/ (1+kAc*xA+ kBc*xB+ kCc*xC) del h=7e4;%J/mol KxO=3*exp( delh/ RG/T) ; Ek=2e5; Ek=Ek/RG; k0=5.5e-O1*exp( Ek/T) ;%1/s kcO= kO*c; EkA=-4e4;EkA=EkA/RG; EkB=-3e4; EkB=E kB/RG ; EkC=-2e4;EkC=EkC/RG; kAc0=0.3*exp( EkA/T); kBcO=l*exp( EkB/T); kCcO=O. l*exp( EkC/T); MG=[46;44;2]; Rpore= 100e-09; DKn=2/3*Rpore*sqrt(8*RG*le3*T/pi*ones( nk,l)./MG); D(1,2) =2.5e-05; D( 1,3)=14e-05; D(2,3)=15e-05; epsta u=O. I ; % Porositat/ Labyri nthfaktor ( E / T ) DKnefF=epstau*DKn;Deff=epstau*D;
eta=1.5e-O5;%kg/m/s BO=Rpore/8*epstau; L=O.OOS;Rp=L;%m phi=L*sqrt( k/Deff( 1,2)); phiq=phi ^2; %Matrizen fuer das S G M werden gebildet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
[ze,sp]=size( Deff);
E=[DefF;zeros( l,sp)]'; DefFz=[DefF+E( l:ze,:);E(sp,:)]; DefFz( l:sp+l:sp*sp)=l; DefFr=ones(sp,sp)./DefFz;
DefFr(l:sp+l:sp*sp)=O;
yo******************************* xs= [1;0;01; Nk=3; %a=l; b=O;%Platte a=l; b=2;%Kugel xj =o knuIIsy( N k ,a, b) ;%bei SE aus JACOBI- N u LL .MAT [A,Bk,Q,W]=orthkol(xj,b,a+l); Qi=inv(Q); %Lasung der S GM-Gleichungen***** *** * ** ** ** lam bdaO=xs( 1)*(ones( Nk, 1)-xj) * ps/( 1/DKn( 1)+1/ D( 1,2))*epstau; lambda=fsolve('ccosoI',lambdaO);%bei SE fmins [la ,xpla]=ode45( 'ccodgl', [0 max( lam bda)]. [xs( 1:n k l ) ; ps]);
297
298 6 Festbettreaktor - zweiphasige Modelle xp=interpl(la,xpla,lambda,'spline');
..........................................
x=xp( :,1:2);x=[x,ones( Nk,l)-[sum(x')]']; xa=[x;xs'] ; xO=Qi( 1,l:N k+l)*xa; xg= [xO;xa] ;
Die hier gewtihlte Programstruktur bestimmt den Loslit I yweg wie folgt: 0
0
Man lost die nach der OK-Methode diskretisierte Randwertgleichung ftir A; das geschieht aus CCODAT heraus mit fsolue und seinem UP CCOSOL. Fur jeden Wertesatz A, den fsolue auf dem Losungswege wtihlt, werden in CCOSOL die DGls filr die Molanteile und den Druck gelost (Gln. (6.31) und (6.30)) und durch Interpolation die zu X gehorenden z- und pWerte bestimmt; das ilbernimmt der DG1-Loser ode45 mit dem UP CCODGL. Die z- und pWerte werden in CCOSOL zusammen mit der Temperatur T an das UP CCOKIN ilbergeben; es liefert die Reaktionsgeschwindigkeiten a n den Kollokationsstellen, mit denen die Zielfunktion fur fsolve gebildet werden kann. Die endgilltigen x-Werte werden am Ende des UPS CCODAT tiber CCODGL berechnet und noch um die Randwerte ergsnzt; aus diesen Werten kann man den Nutzungsgrad berechnen, wie im vorstehenden Problem 6.3.6 gezeigt .
0
Beliebig feine Profile konnen mit dem UP POREPROF berechnet werden. (Das ist ein allgemein anwendbares Programm, deshalb miissen N , xa und Qi entsprechend besetzt werden.)
Die UPS sind nachstehend gelistet: CCOSOL
function f = ccosol(1ambda) global xs n k l ps Bk Lq RG T Rp lambdaNl=[lambda;O]; [la ,xpla]=ode45( 'ccodgl' ,[0 max(lambda)], [xs( 1:nkl);ps]); xp=interpl( la,xpla,lambda,'spline'); r=cco kin(x p,T) ;
f=Bk*lambdaN1+RpA2*RG*T*r; %f=f'*f; zustitzlich bei SE CCODGL
function dxp=ccodgl(l ,y) global NS nk n k l DKneff DefFr BO eta Iy =I engt h(y) ; lyl=ly-1;
6.3 Probleme und LUsungen
299
x=y( 1:lyl); P=Y(lY); x=[x;l-sum(x)]; dx=NS./DKneff-x.*( DefFr*NS)+NS.*(DefFr*x); BOpeta=BO*p*eta; suxK=sum(x./DKnefF); suNSK=sum( NS./DKneff); Nen=l+BOpeta*suxK; dx=dx-x.*(ones(nk,l)+(ones( nk,l)*BOpeta)./DKneff)*suNSK/Nen; dx=dx( l:nkl)/p; dp=suNSK/Nen; dxp=[dx;dp]; CCOKIN
function r = ccokin(xp,T) global Nk xs ps TO kcO KxO kAcO kBcO kCcO RG global delh Ek EkA EkB EkC global kc Kx kAc kBc kCc [ze,sp]=size(xp); x=xp(:, 1:sp-1); x=[x,ones( Nk,l)-[sum(x')]']; x=[x;xs']; p=xp(:,sp); pps=[p/ps;l]; TOT=TO/T; %r=kc*(xA-xB*xC/Kx)/( l+kAc*xA+kBc*xB+kCc*xC) kc=kcO*exp(-Ek/T)*TOT;%Ek:=Ek/RG Kx=KxO*exp(-del h/RG/T); kAc= kAcO*exp(-E kA/T)*TOT; kBc=kBcO*exp(-EkB/T)*TOT; kCc=kCcO*exp(-EkC/T)*TOT; r= kc* pps.*(x(:, 1)-x(: ,2).*x(: ,3)/Kx)./( ones( Nk+l, 1)+kAc*pps.*x(:, l)+. .. kBc*pps.*x(: ,Z)+kCc*pps.*x(: ,3)); POREPROF
x1=0:0.01:1; XOl=ones( N + l , l ) * x l ; il=l:N+l;ll=il'*ones( l,length(xl)); X=X01.^(2*11-2); y= [Qi*xa] ' *X;
300 6 Festbettreaktor - zweiphmige Modelle
6.3.8 Nichtisothermer Festbett reakt or mit Stofftransportwiderstanden im Katalysatorkorn
(***) Filr die Reaktion A ZB + C sollen Temperatur- und Konzentrationsprofile in einem nichtisothermen zweiphasigen FBR berechnet werden. Die Daten werden aus Problem 6.3.7 ilbernommen (bis auf den Kornradius) und um die erforderlichen Reaktordaten erweitert: L=3 m%Schilttl?inge dp=0.005 m;Rp=dp/2;%Kornradius R=0.10/2 m %Rohrradius uO=1 m/s%Strlimungsgeschwindigkeit T0=548 K%Eingangstemperatur Tu=648 K%Umgebungstemperatur xO=[.8;0.1;0.1] %Eingangszusammensetzung cO=p/R/TO mol/m3%Eingangs-(Gesamt-)Konzentration Pemr= 10;%Peclet Masse radial rhokat=1300; % kg/m3, Schuettdichte rhoG=1.293; % kg/m3 Gasdichte cpG=1.046; % kJ/kg/K spez. W u m e des Gases Pehr=5;%Peclet heat radial Bi=2;%Biot-Zahl Losungsvorschlag Da im vorstehenden Problem 6.3.7 die Korngleichungen schon entwickelt sind, erscheint es nicht unvernilnftig, sie mit den Gleichungen fiir die Gasphase im Reaktor zu verbinden, also bei jedem Schritt des DG1-Lbsers fiir die Gasphase die Korngleichungen zu h e n ; das schnellste Lbsungsverfahren ist das allerdings nicht. Schneller w u e sicherlich die Linienmethode, aber auch wesentlich aufwendiger in der Vorbereitung. Alle Daten sind im File CCOFBRDAT enthalten. CCOFBRDAT
global Az Bz Luc hLurcp BiGah Tu Nr Garn Gah Tu NSlv nue Nr global xs T uOc0 nue NS x0 Nk ps DKnefF DefF epstau Wk Nr xjk global Nk xs ps TO kcO KxO kAcO kBcO kCcO RG global delh Ek EkA EkB EkC global xs n k l ps Bk Lq RG T R p global NS nk n k l DKnefF DefFr BO eta global L uc ps global dp lambdaold %A=B+C nk=3;nkl=nk-l; NS=[-1; 1;11;N R=NS; nue=sum( NS);
6.3 Probleme und L6sungen
RG=8.314;%rn3 Pa/rnol/K ps=le5;%Pa T=548;%K c=ps/RG/T;%mol/m3 %r= kc*(xA-xB*xC/Kx)/( l+kAc*xA+ kBc*xB+ kCc*xC) delh=7e4;%J/mol KxO=3*exp(del h/RG/T); Ek=2e5; Ek=Ek/RG; k0=5.5*exp( Ek/T);;%l/s kcO= kO*c; E kA=-4e4; EkA= EkA/ RG; EkB=-3e4; EkB=EkB/RG; EkC=-2e4;EkC=EkC/RG; kAc0=0.3*exp( EkA/T); kBcO=l*exp( EkB/T); kCcO=O. l*exp( EkC/T); MG=[46;44;2]; Rpore= 100e-09; DKn=2/3*Rpore*sqrt(8*RG*le3*T/pi*ones( nk,l)./MG); D( 1,2)=2.5e-05; D(1,3)=14e-O5;D( 2,3)=15e-05; epstau=O.l; DKneff=epstau*DKn;Deff=epstau*D; eta=l.5e-O5;%kg/m/s BO=Rpore/B*epstau; [ze.sp]=size( Deff ); E=[ Deff; zeros( 1,sp)] ' ; Deffz=[Deff+E( l:ze,:);E(sp,:)]; Deffz( l:sp+l:sp*sp)=l; Deffr=ones(sp,sp)./Deffz;
Deffr( l:sp+l:sp*sp)=O; xsO=[ 1;O;O] ;
Nr=3; NSlv=ones( Nr,l)*NS(l); %a=l; b=O;%Platte a = l ; b=l;%Zylinder xjz=oknullsy( Nr,a,b); [Az,Bz,Qz,Wz]=orthkol(xjz,b,a+l); Qiz=i nv( Qz); Nk=3; a = l ; b=2;%Kugel xj k=o knullsy ( Nk ,a, b) ; [A k, Bk, Qk,Wk]=ort hkol (xjk,b,a+ 1); Qi k =inv( Q k) ;
O/oReaktordaten.........................
L=3: dp=0.005; Rp=dp/2; R=O. 10/2; uO=l;
301
302 6 Festbettreaktor - zweiphasige Modelle T0=548; Tu=648; ~0=[.8;0.1;0.1]; CO=PS/ RG/TO; uoco=uo*co; Pernr=lO; Gam= l/Pern r*dp/R* L/R; rhoG=1.293; % kg/rn3 c pG=1.046; % kJ/ kg/ K hLurcp=L/uO/rhoG/cpG*(-del
h*le-03);
Pehr=5; Gah=l/Pehr*dp/R*L/R; Bi=2; BiGah=Bi*Gah;
........................................ Die Reaktorberechnung kann formal wie beim einphasigen Reaktor erfolgen, nur wird in CCOFBRGA anstelle der Reaktionsgeschwindigkeit T die effektive Reaktionsgeschwindigkeit r e f f ilber die Kornbilanzen in einem entsprechenden UP (CCOFBRREFF) berechnet, so wie es im Problem 6.3.7 erltiutert wurde; dieses Problem sollte zuvor studiert werden:
[z,y]=odel5s(’ccofbrga’,[0 11,Iones(Nr,l)*xO( l);ones( Nr, l)*TO]); Die Rechnung nimmt einige Zeit in Anspruch, besonders bei der SE mit ihrem langsameren fmins. Anschlieaend kann mit TRPROF das gesamte Temperaturfeld berechnet werden, mit XRPROF das Konzentrationsfeld der Schlilsselkomponente. Plots dieser Werte seien dem Leser ilberlassen. CCOFBRGA
function dy = ccofbrga(z,y)
% Lost die Reaktorgleichungen rnit der OK-Methode global Az Bz Luc hLurcp BiGah Tu Nr Gam Gah Tu NSlv nue Nr global L Lucv ps xi=y(l:Nr); Ti=y(Nr+l:2*Nr); xl=y(l:Nr); T=y(Nr+l:2*Nr); x l ( Nr+l)=-Az( Nr+l,l:Nr)*xl/Az( Nr+l, Nr+l); T( Nr+l)=( BiGah*Tu-Az( Nr+l, l:Nr)*T)/(Az( Nr+l, Nr+l)+BiGah); reff=ccofbrreff(xi ,Ti); R=ref f. * Lucv*O. 6 Q=refF*hLurcp*0.6; dx=Gam*Bz( l:Nr,:)*xl+( NSlv-nue*xi).*R; dT=Gah*Bz( l:Nr,:)*T+Q; dy=[dx;dT];
6.3 Probleme und Ldsungen
303
CCOFBRREFF
function reffv = ccofbrreff(xi,Ti) global xs T uOcO nue NS x0 Nk ps DKnefF DefF epstau Wk Nr xjk n k l global L Lucv global kc Kx kAc kBc kCc global dp lambdaold reffv=[]; Lucv=[]; lambdaO=xO( l)*(ones( Nk, 1)-xjk)*ps/( l/DKneff( 1)+1/Deff( 1,2));%Anfangsschgtzwert fur lambda% lambdaold=lambdaO*ones( 1,Nr);
%Berechnung der Konzentrationsprofile im Korn an den Kollokationsstellen% for i = 1:Nr xsl=xi( i); uc = uOcO *(1 - nue/NS(l)* xO(l))/(l - nue/NS(l)* xsl); X S ~ = ( uOcO*x0(2)+NS(2)/NS( 1)*( uc*x~l-uO~O*xO( l)))/uc; xs3=l-xsl-xs2; xs=[xsl;xs2;xs3];%Molanteile an der 3uBeren Kornoberflache (surface) T=Ti(i); lam bdaO=lambdaold(: ,i); lambda=fsolve('ccosoI',lambdaO);%Berechnung von A(1) lambdaold(:,i)=lambda;
[la,xpla]=ode15s('ccodgl',[O max(lambda)],[xs(l:nkl);ps]);%Berechnung des xund p-Profils%
xp=interpl(la,xpla,lambda,'spline');%x
und p an den Kollokationsstellenim Korn%
r=ccoki n(xp,T) ; reff=Wk*r;
%Die folgenden Zeilen sind nur Kontrollrechnungen
................................................
rs= kc* (xsl-xs2*xs3/ Kx)/ (l+kAc*xsl+ kBc*xs2+ kCc*xs3);
poreta=reff/rs*3
yo********************************************* refFv=[reffv; refF]; Luc=L/uc; Lucv= [Lucv ;Luc] ; end
Aus technischen Gründen bleibt diese Seite leer
Kapitel 7
Planen und Auswerten reaktionskinetischer Experimente Reaktionskinetische Experimente sollen helfen, den Ablauf chemischer Reaktionen zu verstehen und quantitativ zu fassen. Fur reaktionstechnische Zwecke reduzieren wir die vielftiltigen Aspekte auf drei Hauptfragen: Welche Reaktionen laufen a b (welches ist der ,,Reaktionsmechanismus ") , welchen kinetischen Gesetzen (Geschwindigkeitsgleichungen)folgen diese Reaktionen, und welche Werte haben die kinetischen Parameter (Geschwindigkeitskonstanten)? Bei der Bearbeitung dieser Fragen kann systematisches Vorgehen hilfreich sein, das sich auf bestimmte statistische Methoden stiitzt. Davon handeln die folgenden Abschnitte, wobei das Hauptaugenmerk wieder auf die Hilfestellungen von MATLAB und SIMULINK bei den numerischen Rechnungen gerichtet ist. Wir rollen das reaktionskinetische Problem von hinten auf: Wir beginnen mit der Ermittlung der Koeffizienten, der Parameterschtitzung, im Abschnitt 7.1. Im Abschnitt 7.2 beschtiftigen wir uns dann mit der Rage, wie man die experimentellen Bedingungen wtihlt, um Parameter mbglichst genau zu bestimmen oder zwischen mehreren mbglichen Geschwindigkeitsgleichungen unterscheiden zu kbnnen. Das Problem, ein Reaktionsnetzwerk zu identifizieren, ist alleine betrachtet weit weniger formalisierbar. Es darf aber nicht der Eindruck entstehen, als kbnnten reaktionskinetische Erkenntnisse allein oder auch nur iiberwiegend durch Anwendung von Algorithmen gewonnen werden. Ohne Intuition, Kreativittit, experimentelles Geschick sowie gediegene Kenntnisse in Chemie, Physik und auf einer Reihe anderer Gebiete, nicht zuletzt der Me&, Steuer- und Regelungstechnik (MSR) f t h eine angemessene VersuchsfUhrung, wird man in den seltensten Ftillen zum Ziel kommen. Bevor wir einige Methoden der statistischen Versuchsplanung und -auswertung anwenden, sollten wir an einem Beispiel (Problem 7.3.1) studieren, wie sehr das Planen reaktionskinetischer Experimente auch ohne Einsatz
306
7 Planen und Auswerten reaktionskinetischer Experirnente
formalisierter Methoden gefragt ist und wie stark das Bearbeiten der oben formulierten Hauptfragen ineinandergreift .
7.1
Parameterschatzung
7.1.1 Regression Die Bestimmung von Parameterwerten in Beziehungen zwischen abhangigen (y) und unabhangigen (x)Variablen nennt man ganz allgemein Regression. Zur Systematik (linear, nichtlinear, multipel usw.) sei auf die einschlagige Literatur verwiesen; wir betrachten wie bisher mbglichst typische Beispiele. Beginnen wir mit Mefireihen in einem Batch-Reaktor. Wir kennen das Netzwerk und die Geschwindigkeitsgleichungen und wollen aus vorliegenden MeDergebnissen kinetische Koeffizienten, die Parameter, bestimmen; eine solche Aufgabe finden Sie als Problem 7.3.3. Mit der Ermittlung (,,Sch&tzung") von Parametern ist es i. a. nicht getan. Man mbchte wissen, wie genau die Parameter sind, ob das Model1 ilberhaupt zutrifft oder ob und wie man die Modellbildung verbessern kann. Beginnen wir mit der Bewertung der Parameter. Von der einfachen linearen Regression her sind wahrscheinlich bekannt die Standardabweichung und das Vertrauensintervall; dem entsprechen etwas verallgemeinert die Kovarianz-Matrix und der Konfidenzbereich. Sehr niitzlich ist es auch, sich die Zielfunktion genauer anzusehen, was besonders bei nur zwei Parametern leicht mbglich ist. Dazu erzeugt man Konturenplots, also Schnitte durch das Gebirge der Zielfunktion fiir gewiinschte Werte @(e).In der Nahe von 8' nahert man hadig die unregelrnafligen Konturen durch Ellipsen an. (In Fallen mit mehr als zwei Parametern (1 = 2) sind die Konturen l-dimensionale Hyperfliichen und die Naherungen Ellipsoide.) Kovarianzmatrix, Konfidenzbereich und Ellipsoide sind alle eng rnit der Hesseschen Matrix H(8) verknilpft, der zweiten Ableitung der Zielfunktion @(Q) nach 8, bzw. mit ihrer Naherung N. Bei unserem Beispielstyp (nur eine Funktionsgleichung, LSM, Standardabweichung der MeDgrbBen u ) ergibt sich filr die Ellipsoide, die einen Bereich @(e) - @ * 5 c abstecken, (angeniihert)
und der Konfidenzbereich ilber die Bedingung 1 (e - e * ) q e- el) 5 ls2
2
Flp-1
N ist wie gesagt eine Niiherung fiir H, definiert durch
N =2JTJ
(7.3)
7.1 Parameterschatzung
307
mit der Jacobi-Matrix
af
J=-
(7-4) a8 wobei f die Modellfunktion fur die einzelnen Versuchspunkte repruentiert. Fth die Kovarianz-Matrix der Parameter Ve gilt bei unserem Beispielstyp Ve
FZ
2~~N-l
(7.5)
In dem Problem 7.3.4 werden diese Beziehungen auf unser Beispiel der Reaktion erster Ordnung in Problem 7.3.3 angewendet. Wir mtissen uns hier mit diesen ,,Kochvorschriften " begntigen; eine genauere Behandlung W d e den Rahmen dieses Buches sprengen, es sei also auf die Literatur verwiesen (s. z. B. [31]). Eine bedeutende Rolle bei der Bewertung von (Parameter-)Scht-itzwerten spielt die kanonische Form des Fehlerellipsoids sowie die damit eng verbundenen Hauptkomponenten. Wie die Ellipsen in Abb. 7.8 zeigen, gibt es offenbar (in dem Beispiel) lineare Parameterkombinationen, die besonders gut, und andere, die besonders schlecht bestimmt sind, nt-imlich die beiden Hauptachsen einer Ellipse. Spgtestens wenn mehr als drei bis vier Parameter vorliegen, wird die grafische Veranschaulichung sehr mlihsam; dann bescht-iftigt man sich zweckm a i g mit den kanonischen Variablen bzw. den Hauptkomponenten. Allgemein konnen wir die Hauptachsen eines Fehlerellipsoids Uber eine Eigenwert-Eigenvektor-Zerlegungvon Ve bzw. N erhalten:
Vg = UnUT bzw. N = UAUT
(7.6)
wobei I t bzw. A = I T 'die Diagonalmatrix der Eigenwerte ist und U eine unitare Matrix, deren Spalten die normierten Eigenvektoren von Vg sind. Dann ist
60TN68 = 68TUhUT68 Mit
(7.7)
+ = UT68 e r h a t man 1
60TN68 = +TA+ =
C Xi&
(7.8)
i=l
also die Gleichung eines Ellipsoids mit den Hauptachsen der Lt-inge 1 / 6 . Die Hauptkomponenten pi ( p = UT8) fallen hier wegen G1. (7.5) mit den kanonischen Variablen qi zusammen. Kanonische Variable und Hauptkomponenten h h g e n von der Skalierung der Variablen ab. Eine ubliche Skalierung erzeugt Variable mit der Standardabweichung eins: Ci = 8i(Vgii)-1/2. Die Kovarianzmatrix der so skalierten Parameter ist die Korrelationsmatrix:
308 7 Planen und Auswerten reaktionskinetischer Experimente
Vc = DVOD
(7.9)
wobei D die Diagonalmatrix der reziproken Standardabweichungen ist, in der MATLAB-Schreibweise
D =diag((diag(Ve))-"2)
(7.10)
Man kunnte das Problem 7.3.4 noch erganzen und die Hauptkomponenten sowie die Korrelationsmatrix berechnen. Das geschieht hier im wesentlichen nur, um die Eigenwert-Eigenvektor-Zerlegungzu zeigen und die einfache Bildung von Diagonalmatrizen in MATLAB vorzufiihren.
7.1.2 Parameterschatzung in Differentialgleichungen 7.1.2.1
Sensitivitatsgleichungen
Haufig sind die berechneten Werte fiir die Meflgroflen nicht wie im vorherge henden Abschnitt ilber algebraische Gleichungen zu erhalten, sondern nur iiber DGls, die numerisch integriert werden miissen; das trifft z. B. in vielen Fallen auf Batch-Reaktoren zu, so wie es im Abschnitt 4.1 ausfiihrlich dargestellt wurde. Ein Beispiel fth die Auswertung von Messungen in einem solchen Reaktor ist im Problem 7.3.6 zu finden, Auswertung also von Konzentrations-Zeit-Kurven, wie man zu sagen pflegt. (In dem genannten Problem lassen sich die DGls, weil linear, allerdings auch analytisch losen - so ist ein Vergleich mit den numerischen Losungen muglich.) Zur Bewertung der Parameter bendtigen wir wieder die Matrix N und damit die Jacobi-Matrix J, also die Ableitungen der Zielfunktion nach den Parametern. Da MeflgrUi3en nicht mit den abhangigen Variablen des DG1-Systems identisch sein miissen, soll eine allgemeine Struktur der Parameterschatzung in DGls skizziert werden. Wir haben Meflwerte y (ftir jeden Versuch l...m) und zugehdrige Funktionswerte y^ = f(s,0 ) . s sind hierbei die abhangigen Variablen der DGls, einer weit verbreiteten Konvention folgend als Zustandsvariable (state variables) bezeichnet. Da s ebenfails von 8 abhangt, miissen die Ableitungen in der Jacobi-Matrix J mit den totalen Differentialen gebildet werden:
(7.11) heiflen Sensitivitiitskoeffizienten; sie geben die Empfindlichkeit der Zustandsvariablen gegeniiber Anderungen der Parameter wieder und spielen in vielen Zusammenhangen eine wichtige Rolle. Wenn wie hier s ,,differentiellet' Variable sind, kann man sich die Sensitivitgtskoeffizienten entweder iiber Differenzenap proximationen besorgen oder iiber die sog. Sensitivitatsgleichungen,die aus den
7.1 Parameterschtitzung
309
Zustandsgleichungen = h(t, x,s, 0) durch Ableitung nach 8 folgen (x sind unabhtingige Variable zusiitzlich zu t): (7.12) Wenn wir ungepriift annehmen, d d die Reihenfolge der Ableitung auf der linken Seite vertauscht werden darf, erhalten wir d as = ah + -ahds -(-) dt ae ae asae
und damit ein DG1-System fur 7.1.2.2
(7.13)
B, die Sensitivitiitsgleichungen.
Das ,,inverse" Problem
Wenn es sich um die Parameterschiitzung in DGls handelt, wird in der (mathematisch orientierten) Literatur gerne vom ,,inversen" Problem gesprochen, ,,invers" zur LBsung von DGls mit bekannten Koeffizienten. Im vorigen Abschnitt sind wir solche Aufgaben im konventionellen Stil angegangen: Eine O p timierroutine sucht die optimalen Koeffizienten, DG1-Lbser werden bei jedem ihrer Schritte zur Berechnung der Zielfunktion eingesetzt. Es ist mit Recht wiederholt darauf hingewiesen worden, dai3 dieses konventionelle Vorgehen natiirlich nicht das einzig mbgliche ist und zudem gewisse Gefahren aufweist. Es kann namlich durchaus vorkommen, d d im Verlauf der Optimierung ein Parametersatz gewiihlt wird, mit dem die Integrationsroutine nicht zurechtkommt. Obwohl sich also das DG1-System mit den ,,richtigen", aber noch unbekannten Parametern, gutartig verhtilt, kann es im Verlauf der Optimierung mit einem ungeeigneten Parametersatz abstiirzen. Um solchen unerfreulichen Zwischenfiillen vorzubeugen, haben vor allem Bock und Mitarbeiter in einer ganzen Reihe von Arbeiten (s. z. B. [32]) eine andere Strategie der Parameterschiitzung in DGls entwickelt. WBhrend das konventionelle Vorgehen die Lbsung des DG1-Systems ganz auf die von der Optimierroutine gewiihlten Parameter abstellt, macht sich diese andere Strategie geschickt zu Nutze, dai3 der Lbsungsverlauf c(t;p) durch die Meowerte schon vorgezeichnet ist. Sie interpretiert die Aufgabe, die L6sung des DG1-Systems optimal an die Mei3werte anzupassen, als ein iiberbestimmtes Multipunkt-Randwertproblem mit Nebenbedingungen, indem sie im Sinne der Mehrzielmethode zusiitzlich zu den kinetischen Parametern p an m Stiitzstellen t k die Vektoren (Parameter) s k e i n f t k t (s. Abschnitt 5.2.3). Die Zielfunktion, also z. B. die Summe der Abweichungsquadrate, sowie eventuelle Nebenbedingungen in Gleichheits- oder Ungleichheitsform werden so aus Funktionen von p zu Funktionen von p und s k . Hinzu kommen als Nebenbedingungen die Stetigkeitsbedingungen an den Stiitzstellen y ( t k + l ; t k , sk)
-sk+l
=0
fiir k = l....m - 1
(7.14)
310
7 Planen und Auswerten reaktionskinetischer Experimente
und die Anfangs- bzw. Randbedingungen r(s1, sm) = 0
(7.15)
(s. a. Gln. (5.60) und (5.61)). Damit erhtilt man ein htjherdimensionales O p timierproblem. Fur die sk hat man iiber die Meflwerte, wie gesagt, sehr gute Anfangsschgtzwerte; bisherige Erfahrungen, so wird berichtet, deuten darauf hin, dafl sich schlechte Startwerte der kinetischen Parameter p bei weitem nicht so unangenehm auswirken, wie sie das beim konventionellen Verfahren haufig tun. Wir benutzen als Testbeispiel fur die Parameterschiitzung in DGls mit Hilfe der Mehrzielmethode eine Modifikation des berilchtigten Randwertproblems von Bulirsch im Abschnitt 5.2.3 (Problem 7.3.7). Der Gegensatz zwischen den beiden besprochenen Verfahren ist ilberzeichnet. Auch bei der zuerst genannten, ilblichen Methode kann man die MeBwerte benutzen, um gute Startwerte filr die Parameter zu finden, und der Gefahr entgehen, die Losung des DG1-Systems durch ungeeignete Parameterwerte zu erschweren oder zu vereiteln. Eine gut bekannte Methode ist die differentielle Auswertung der Meflwerte; sie wird allerdings wenig angewendet, weil das erforderliche numerische Differenzieren fehlervergrdflernd wirkt und deshalb als ungeeignet angesehen wird - in vielen Fgllen zu Unrecht, wie sich zeigen wird (Probleme 7.3.8, 7.3.9 und 7.3.10). Selbst wenn sich die Meflwerte nicht verniinftig differenzieren lassen, haben wir noch einen Pfeil im Kocher: Man kann die MeBwerte auch integrieren, wie es die HJB-Methode zeigt, benannt nach den Autoren Himmelblau, Jones und Bischoff [33] (Probleme 7.3.11 und 7.3.12). Differenzieren und Integrieren von Mei3werten wird im nichsten Abschnitt besprochen.
7.1.3 Differenzieren und Integrieren von Meflwerten Differenzieren von Meflwerten ist ein fehlervergroflerndes Verfahren, das ist nicht zu bestreiten. Deshalb wird htiufig davor gewarnt, oder Aussicht auf Erfolg hochstens bei genilgend dicht liegenden, nur mit geringen Fehlern behafteten Meflwerten in Aussicht gestellt. Tatsgchlich kann man aber durch geschickte Wahl der Anpassungsfunktionen durchaus brauchbare Ergebnisse erreichen. So erhalt man aus Konzentrations-Zeit-Kurven Reaktionsgeschwindigkeiten oder wenigstens Bildungsgeschwindigkeiten, die zumindest Anfangsschgtzwerte der kinetischen Parameter fiir integrale Auswertungsmethoden liefern konnen. Vor allem aber erleichtern Reaktionsgeschwindigkeiten die Suche nach passenden Geschwindigkeitsgleichungen ganz erheblich im Vergleich mit integralen Methoden. Die Probleme dieses Abschnitts behandeln sptirliche Konzentrations-Zeit-Werte einer Folgereaktion. (Es ist eine Variante eines Problems, das wir im Abschnitt ilber Modellaufbau wieder aufgreifen.) Polynome sind filr solche sparlichen Werte weniger geeignet (Problem 7.3.8) und ausgleichende Splines nur bedingt (Probleme 7.3.8 und 7.3.9). Als Methode der Wahl werden rationale Funktionen vorgestellt und im Problem 7.3.10 angewendet. Die folgenden Bilder 7.1, 7.2 und
7. I Parameterscblitzung 31 1
7.3 zeigen anhand von drei Grundtypen von Konzentrations-Zeit-Kurven, wie gut im Prinzip solche Funktionen geeignet sind. Die Anpassung a n Meawerte fiihrt man mit Hilfe eines Optimierverfahrens durch.
2
4
6
8
0
X
Abbildung 7.1: Rationale Funktion fur eine typische Konzentrations-Zeit-Kurve eines Edukts: 9=
1 0.122+0.52+1
Es bleibt noch einiges zur HJB-Methode zu sagen, zur numerischen Integration von Mefiwerten, bei der die Modellfunktion allerdings vorgegeben werden mu& Betrachten wir der Einfachheit halber wieder Messungen im BatchReaktor, nur filr eine Reaktion, beschrieben durch die Bilanzgleichung
(7.16) Anstatt nun im Verlauf einer Regression fur jeden Parametersatz k das DG1System fur die ci zu lasen, ntihern wir die unbekannten Funktionswerte ci(t) durch Interpolationswerte cf (t) zwischen den MeDwerten an und erhalten durch numerische Integration
(7.17) Diese Werte setzen wir als ,,berechnete Werte" in die Zielfunktion ein, also um z. B. die Summe der Abweichungsquadrate zu bilden. Da die Integration ein gltittendes Verfahren ist, verstarkt sie nicht wie die numerische Differentiation
312
7 Planen und Auswerten reaktionskinetischer Experimente
X
Abbildung 7.2: Rationale Funktion fiir eine typische Konzentrations-Zeit-Kurve eines Zwischenprodukts: y = 0.522+20.12+1
X
Abbildung 7.3: Rationale Funktion fur eine typische Konzentrations-Zeit-Kurve eines Folgeprodukts: 102
y = 1OZ2+100
7.2 Versuchsplanung
313
die Meafehler. Andererseits verzerrt das HJB-Verfahren die Fehlerstruktur: Die berechneten Werte sind jetzt Funktionen der Mei3werte und kbnnen auch g r o 5 ziigig nicht lgnger als ,,kontrollierte" Variable gelten. Besonders deutlich wird das, wenn man die Geschwindigkeitsgleichungseparieren kann, hier bei nur einer Reaktion in T = k F ( c ) . Dann wird die Regression linear, aber die ,,unabhtingige" Variable, das Integral iiber F ( c * ) ,ist alles andere als unabhgngig. Wie man diese Verzerrung der Fehlerstruktur auch bewerten mag: Auf jeden Fall liefert die HJB-Methode fast immer zumindest gute Parameter-Startwerte fiir ein eventuell folgendes Schgtzverfahren. Es ist also durchaus nicht so, daB man auf das Bocksche Verfahren angewiesen ist, wenn man die Meawerte geblihrend beriicksichtigen mbchte. Ganz im Gegenteil: Fast immer wird man iiber die Mei3werte mit Hilfe integrierender oder differenzierender Verfahren wenn nicht schon zu befriedigenden Parameterwerten, so zumindest zu guten Startwerten fiir eine integrale Auswertung kommen kbnnen. So wird man i. a. auch das Problem umgehen, unnbtig schlechte Konditionen fiir die Lbsung von Modell-DGls zu schaffen. Es sei abschlieaend noch einmal hervorgehoben: Eine numerische Differentiation kinetischer Meilwerte erleichtert da, wo sie ohne zu starke Fehlervergroflerung moglich ist , die Suche nach passenden Modellfunktionen, sprich Geschwindigkeitsgleichungen, im Vergleich zu integrierenden Verfahren.
7.2 Versuchsplanung Bisher waren wir davon ausgegangen, dai3 ein kinetisches Modell, eine oder mehrere Geschwindigkeitsgleichungen, an Mei3werte angepai3t, also ihre Parameter bestimmt werden sollten. Die ngchste Frage ist, ob man Versuchsbedingungen so wiihlen kann, dail die ermittelten Parameter moglichst genau sind. Anschliei3end gehen wir einen Schritt weiter und fragen, wie man aus einer Anzahl von Reaktionsmodellen, die aus mechanistischen oder anderen Uberlegungen in Frage kommen, das geeignetste finden kann. Schliei3lich werden wir uns mit einem Aspekt des Modellfindens beschtiftigen, niimlich dem sog. Modellaufbau. Es versteht sich, dai3 wir unser jeweiliges Ziel erst geeignet formulieren miissen, bevor wir versuchen kbnnen, es mit mathematisch-statistischen Methoden zu erreichen. Zum Beispiel haben wir Begriffe wie ,,genau" oder ,,geeignet" verwendet, die heuristisch ergiebig sein mbgen, aber noch genau definiert werden miissen.
7.2.1 Parameterpriizisierung Beginnen wir also mit Versuchsplaen zur Parameterprgzisierung. Ein naivintuitiver Zugang kbnnte sein, das Konfidenzvolumen der Parameter in linearer Ntiherung , also das Konfidenzellipsoid, mbglichst klein zu machen. Diese Vermutung erweist sich als aui3erordentlich tragfiihig und l a t sich aus verschiedenen Betrachtungsweisen ntiher begriinden. Fur das Volumen des Konfidenzellipsoids gilt die Proportionalbeziehung
314
7 Planen und Auswerten reaktionskinetischer Experimente
1
' - det(JTJ)
(7.18)
wobei J wie bisher die Jacobi-Matrix ist. Bei nichtlinearen Modellen enthalt sie neben den unabhagigen Variablen auch Parameter. Wir konnen also unsere Versuche nur planen, wenn wir fiir die Parameter verniinftige Schatzwerte zur Verfiigung haben; i. a. wird man sich solche Schatzwerte aus ,,ungeplanten" Vorversuchen besorgen. Im speziellen Fall, in dem wir so viele neue Versuche planen, wie Parameter vorhanden sind, ist J quadratisch und es genilgt, Idet(J)l zu maximieren; das reduziert den Rechenaufwand erheblich (erhoht aber mbglicherweise den experimentellen Aufwand). Fur diesen speziellen Fall wurde das Kriterium zum ersten Ma1 von Box und Lucas aufgestellt 134) und wird nach ihnen benannt. Um es anzuwenden, kbnnen wir auf Methoden zurilckgreifen, die wir an anderen Stellen schon kennengelernt haben: Bildung der Jacobi-Matrix mit Hilfe von MAPLE und Maximierung ihrer Determinante mit einer Optimierroutine von MATLAB.
7.2.2
Modellaufbau
Wir wollen in diesem Kapitel annehmen, dai3 wir zwar das Reaktionsnetzwerk kennen, aber noch nichts oder nur wenig iiber die Form der Geschwindigkeitsgleichungen. Dann m b s e n wir zungchst passende Geschwindigkeitsgleichungen finden. Wie man hier strategisch geschickt vorgehen kann, haben in einer lesenswerten Arbeit Box und Hunter [35]exemplarisch gezeigt (s. Problem 7.3.14). Man kbnnte j a einige Meareihen im Batch-Reaktor machen, unter Variation der Anfangskonzentrationen und der Temperatur, und versuchen, an die Ergebnisse ilbliche Geschwindigkeitsgleichungen anzupassen, z. B. moglichst allgemeine Potenzgesetze. Die Erfahrung zeigt , dafl die simultane Ermittlung von individuellen Reaktionsordnungen, gegebenenfalls noch verbunden mit einem Arrhenius-Term, die Konvergenz der Regressionsrechnungen erschwert oder gar verhindert; im besten Fall landet man meistens bei hochkorrelierten Parametern. Box und Hunter gehen bei der Versuchsauswertung einen anderen Weg: Sie beginnen mit mbglichst einfachen Geschwindigkeitsgleichungen,z. B. solchen erster Ordnung, bestimmen die Geschwindigkeitskonstanten bei den verschiedenen Versuchseinstellungen, und testen sie dann auf ,,Konstanz ". Dabei nutzen sie geschickt die rechnerischen Vorteile von Faktorplanen aus. ,,Konstanten L L , die Abhangigkeiten von den Faktoren zeigen, enthiillen oft auch schon die Art dieser Abhangigkeit und weisen den Weg zu sinnvollen Modellverbesserungen; daher der Ausdruck ,,Modellaufbau". Naheres ist in dem genannten Problem zu finden. Da Faktorplane hier eine wichtige Rolle spielen, seien einige Eigenschaften im folgenden skizziert , die in den meisten einschlagigen Abhandlungen zu kurz kommen oder gar nicht erwahnt werden.
7.2 Versuchsplanung 315
Faktorplane Oft verstellt der Formalismus der Faktorplhe, verstellen Effekte und Wechselwirkungen den Blick darauf, daB es sich um nichts anderes handelt als um die Anpassung von Polynomen an Daten, wobei geschickte Tlansformationen dafiir sorgen, dafi der Rechenaufwand so weit wie mbglich reduziert wird, bis auf Kochvorschriften fur eine Tabellenkalkulation, wie man heute sagen wthde. Betrachten wir als Beispiel einen funktionalen Zusammenhang zwischen einer abhiingigen Variablen y und drei unabhangigen Variablen v1, u2 und v3: y = f ( q ,212, v3). Wir stellen in acht Experimenten die Variablen, die ,,Faktoren", auf je zwei Werte ein und messen die ,,Antwort" y , mit anderen Worten: Wir fiihren einen 23-Faktorplan aus. Dann passen wir ein Polynom an, in dem alle mbglichen Kombinationen der drei Faktoren auftreten: y = b0
+ blul + b2U2 + b3v3 + b12ulu2 + ... + b123Ulv2v3
(7.19)
Zuvor aber transformieren wir die vi so, dal3 bei den Versuchseinstellungen u+ und v i die Transformierten die Werte +1 und -1 annehmen, also:
5j
=
vi-
v++v-
' 2 '
v+ - v++v; 2
a
= 2vi - (v+
+ va:)
(7.20)
u+ - v;
In der transformierten Form y = a0
+
a151
+ ... + a123515253
(7.21)
ftihren wir nun eine lineare Mehrfach-Regression durch, urn die Koeffizienten zu bestimmen; dazu musen die Ableitungen der Summe der Abweichungsquadrate nach den KoefFizienten gebildet und ihre Nullstellen bestimmt werden: Wir erhalten das Gleichungssystem
x(% 16
- (a0
a=
+ alzli + +
a12321i22i53i))(-5:li52iz3j)
= 0
(7.24)
1
Aufgrund der Transformation ist dieses Gleichungssystem vbllig entkoppelt ; wir kbnnen die Parameter einzeln berechnen:
316
7 Planen und Auswerten reaktionskinetischer Experimente
(7.25) (7.26)
(7.27) wobei n = 16. Alle anderen Produkt-Terme in den Gleichungen summieren sich zu Null; deswegen werden diese Faktorplane als orthogonal bezeichnet. (Die Parameter unterscheiden sich von den Effekten um einen Faktor zwei.)
7.2.3
Modelldiskriminierung
Wenn zwei oder mehrere Modellgleichungen MeDdaten anscheinend gleich gut beschreiben, kannen weitere Experimente eventuell eine Entscheidung herbeifiihren. Solche zusgtzlichen Experimente sollten am besten in einem Bereich der unabhgngigen (einstellbaren) Variablen durchgefiihrt werden, in dem sich die Antworten (Meaergebnisse) maglichst stark unterscheiden. Beschranken wir uns auf zwei Modellgleichungen. Fiir diesen Fall haben Box und Hill gezeigt (s. [31]),dai3 die Grtifle
11,2(c) =
1 u22 -l+-[(-) 2 01
1 1 1 + (-)U0 21 2] + -[7j + -](?-‘2’ 2 51 0;
- ?-(1))2
(7.28)
zu maximieren ist, um zwischen den beiden Modellgleichungen optimal diskriminieren zu k8nnen. In dieser Gleichung sind hier schon speziell Reaktionsgeschwindigkeiten d l ) und d2)statt allgemeiner Modellvariabler eingesetzt. ( 0 1 , ~sind ) ~ die Varianzen der Vorhersagefehler der MeDwerte di) , gegeben durch
bzw.
(7.30) u ist die Standardabweichung der Meawerte, die ebenfalls von c a b h a g e n kann, j der Jacobi-Vektor $. Offenbar miissen bereits eine Reihe von Messungen durchgefilhrt worden sein, um Schatzwerte sowohl fiir die Standardabweichung u als auch ftir die Parameter (ko) in den Modellgleichungen und ihre Kovarianzmatrix (VO) zu haben; sonst kunnte man I l , z ( c ) nicht maximieren.
7.3 Probleme und Losungen
317
Wie weit sich die Waage der einen oder anderen Geschwindigkeitsgleichung (oder allgemein: Modellfunktion) zuneigt, wird durch das Likelihood-Verhaltnis angegeben:
(7.31)
Man kann auch die sog. Konfidenz liegt.
L(lfyL(2)bilden, die zwischen 0 und 100 %
Probleme und Losungen
7.3 7.3.1
Kinetische Untersuchungen im isothermen Batch-Reaktor (*)
Die Komponente A reagiert zu einem Gemisch von A, B, C und D. Aus Vorversuchen ist bekannt, dai3 in etwa 60 Zeiteinheiten die Reaktionen weitgehend abgelaufen sind. Sie verfolgen die Konzentrations-Zeit-Kurven der Komponenten in einem gut gerilhrten Kolben unter streng isothermen Bedingungen, indem Sie von Zeit zu Zeit geringe Probemengen ziehen, die Reaktion in diesen Proben ohne Verzogerung quenchen (d. h. abbrechen) und die Zusammensetzung analysieren. Solche Versuchslaufe kbnnen Sie mit verschiedenen Anfangskonzentrationen wiederholen. Aus den Ergebnissen der Versuchsreihe sollen Sie folgende kinetische Informationen gewinnen: Welche Reaktionen laufen ab, mit anderen Worten: Wie sieht das Reaktionsnetzwerk aus? Welchen Geschwindigkeitsgesetzen folgen die identifizierten Reaktionen? Welche Werte haben die kinetischen Koeffizienten dieser Geschwindigkeitsgleichungen? Die Versuchsliiufe werden durch das File ABCD2.EXE simuliert: Starten Sie einen Versuchslauf durch Eingabe von ABCD2 am DOS-Prompt. Geben Sie die erfragten Werte ein: zunkhst eine beliebige Zahl zwischen 0 und 100 (mbglichst fur jeden L a d eine andere) dann die Anfangskonzentrationen der Komponenten zwischen 0 und 1 dann die Zeitpunkte der Probenahmen.
318
7 Planen und Auswerten reaktionskinetischer Experimente
Run 1 2 3 4 5 6 7 8
A(0) 1 0 0 1
1 0 .5 0
Tabelle 7.1: Versuchsdaten. B(0) C(0) D(0) tm 0 0 0 5 10 20 30 40 0 1 0 5 10 20 30 40 0 0 1 5 10 20 30 40 0 0 0 12345 0 0 0 .33 .66 1 1.33 1.66 1 0 0 12345 0 0 0 12345 .5 0 0 12345
Die Einheiten spielen keine Rolle, auch die Einheit der Zeit nicht. Abstande von 10 sind eine gute erste Wahl. (Da keine Einheiten verwendet werden, um die Zahlenwerte einfach zu halten, konnen Sie natiirlich auch fiir die kinetischen Parameter nur Zahlenwerte ohne Einheiten erhalten. Wenn Sie wollen, kmnen Sie sich fiir alle Grbflen konsistente Einheiten einfallen lassen.) Die Analysenergebnisse finden Sie nach jedem Lauf in dem ASCII-File ABCDAUSDAT; die erste Kolonne enthglt die Zeitpunkte der Probenahme, die folgenden die Konzentrationen von A bis D. Dieses File wird bei jedem neuen Lauf iiberschrieben! Losungsvorschlag Man macht eine Reihe von Versuchslaufen mit verschiedenen Anfangskonzentrationen, die zusammen mit den Zeitpunkten der Probenahme (tm) in der folgenden Tabelle 7.1 zusammengestellt sind; Konzentrations-Zeit-Werte sind in den Abbildungen 7.4 und 7.5 zu sehen; an die Meflwerte der Runs 4 bis 6 wurden Polynome 4. Grades angepaflt. Auswertung in Stichworten: Run 1 (Abb. 7.4) ergibt grobe Ubersicht. A F! B ziemlich schnell; kein Hinweis auf eine Weiterreaktion von C oder D mit anderen Partnern. Runs 2 und 3 zeigen, d d C und D zumindest alleine nicht reagieren. Run 4 (Abb. 7.5, oben) laflt vermuten, dafl C ein Folgeprodukt von B ist. Die Anfangssteigungen der Polynome ergeben als erste Schtitzwerte far die G e schwindigkeitskonstante kab = 0.797 und fiir kad = 0.011. Run 5 (Abb. 7.5, Mitte) erhartet den Verdacht aus Run 4, daB C ein Folgeprodukt von B ist. (Die Probenahme in kurzen Zeitabsttinden nach Reaktionsbeginn, im Computerexperiment ohne weiteres mbglich, kann in der Praxis zu erheblichen Problemen fiihren oder sogar unmbglich sein. In solchen Fallen wgre daran zu denken, einen station& arbeitenden Konti-Reaktor (CSTR oder PFR) im differentiellen Modus einzusetzen.) Run 6 (Abb. 7.5, unten) zeigt deutlich, d d D auch direkt aus B entsteht. Es ergibt sich: kba = 0.414, kbd = 0.0093, kbc = 0.0294. Aus Run 7 folgt: kad = 0.0097, kab = 0.804; der Vergleich mit den Werten aus Run 4 deutet auf Reaktionssordnungen von 1.
7.3 Probleme und Ltlsungen
319
Aus Run 8 ergibt sich: kba = 0.414, kbc = 0.029, kbd = 0.0097; der Vergleich mit den Werten aus Run 6 zeigt, dafl die entsprechenden Reaktionen ebenfalls erster Ordnung sind. Das Reaktionsnetzwerk ist also mit grofler Sicherheit identifiziert; es ist in Abb. 7.7 zu sehen.
1-
0.8.-
0.6-
'A
+ B O C xD
+
-a
+ 0
0.4 -
+ 0
0.2-
0
+
t 0
0
0
Abbildung 7.4: Meflergebnisse im ersten Versuchslauf mit den Komponenten A, B, C und D. Die aus den Anfangssteigungen der Polynome stammenden Schtitzwerte fiir die Geschwindigkeitskonstanten sind schon recht befriedigend, d. h. sie geben sogar den Kurvenverlauf von Run 1 (der nicht zur Anpassung verwendet wurde!) iiber einen weiten Zeitbereich zumindest in der Tendenz richtig wieder. Das ist im linken Teilbild von Abb. 7.6 zu sehen, wo die (numerischen) Ltlsungen der Bilanzgleichungen fiir den BR mit den Sch2tzwerten der Konstanten als Kurven eingezeichnet sind. Die Konstanten kunnen aber noch erheblich verbessert werden: Dazu wurden alle Messergebnisse der Runs 4 bis 8 simultan benutzt. Ein Optimierverfahren (hier fmzns) minimiert die Summe der Abweichungsquadrate zwischen den Messwerten und den berechneten Werten. Die ,,berechneten Werte werden durch numerische Ldsung der Bilanzgleichungen inklusive der jeweiligen Run-Bedingungen (Anfangswerte, Zeitbereich) erhalten; zur Ldsung wurde hier ode45 verwendet. (Ahnliche Auswertungen kdnnen Sie im Problem 7.3.6 n2her kennenlernen.) Die Ergebnisse sind im rechten Teilbild von Abb. 7.6 dargestellt . Bei realen kinetischen Experimenten wird man htiufig nicht eine so hohe Meflgenauigkeit wie hier (Standardabweichungen von ca. 1 %) erreichen ktlnnen. Die Bilanzgleichungen seien zur Vollstadigkeit noch angegben, und zwar durch das Unterprogramm zu ode45, in dem die s(i) unschwer als die dci/dt und LL
320
7 Planen und Auswerten reaktionskinetischer Experimente
0.5
1.5
2
I
2
4
6
Abbildung 7.5: Ergebnisse von Versuchen mit den Komponenten A, B, C und D. Oben: Versuch 4; Mitte: Versuch 5; unten: Versuch 6 . Symbole und Achsen wie in Abb. 714
Abbildung 7.6: Vergleich gemessener und berechneter Werte im Versuch 1. Links: Geschwindigkeitskonstanten aus den Anfangssteigungen der Polynome. Rechts: Geschwindigkeitskonstanten aus den Versuchen 4 bis 8 durch Regression. Geschwindigkeitkonstantenin Abb. 7.7; Symbole und Achsen wie in Abb. 7.4.
322 7 Planen und Auswerten reaktionskinetischer Experimente AU S W ERT 7 glob6%setzt zur Auswertung erforderliche Variable tdos=5000;npO( nkz)=ndos/tdos; tdos0=1000;%die Einstellungen beim Versuch%
load rkl-sy Qr=cumtrapz(t,qr); delhm=-Qr(size(Qr,l))/nO(
1);
%Der Umsatz, genauer der Umsatz-Vektor U(t) folgt aus der nhchsten Anweisung% U=Qr/Qr(size(Qr,l)); np0(4)=npO( 2)*mol k( 2)*4/mol k( 4);% die Dosierrate der Schwefelshure ( o l e
um mit 20 ?&
,909)
%Die folgende Berechnung der Mole der Komponenten ist filr jemanden vielleicht verstgndlicher, der an Programmieren in einer der ilblichen Sprachen gewtihnt ist; in MATLAB gelten solche Schleifen als schlechter Stil, weil ihre Ausfiihrung langsam ist; wenn irgend muglich, sollte man eine vektorisierte Form vorziehen - sie folgt anschlieOend.% %for i = 1:nk %for j = l:size(t,l) %nmoI(j,i)=nO(i)+nue(i)/(-nue( I))*U(j)*nO(l); %if (t(j)>=tdosO & t(j) <= tdosO+tdos) %nmol(j,i)=nmol(j, i)+n pO( i)*(t(j)-tdosO); Yoelse %n rnol(j,i) =nmol(j,i)+n pO(i)*tdos; %end %end %end
%Vektorisierte Form der vorstehenden Schleifen: si l=size(t, 1) n=ones(siI, I)*nO’+ones(siI, I)*nue’/(-nue( I))*nO( tz=t; [i2,j2]=find( tz<=tdosO+tdos);
I) .*(U*ones( 1,4));
[i3,j3]=find(tz>=tdosO+tdos); tz(i2)=tz(i2)-tdosO; tz( i3)=tdos; n=n+tz*npO’;
nmol=n; %Berechnung der Reaktionsgeschwindigkeit und der zugehtirigen Konzentrationen: % r ate=qr/ (-del hm) ./vol ; ci=nmoI./(voI*ones( 1,4));
7.3 Probleme und Ldsungen
323
%Zu kleine Werte der Reaktionsgeschwindigkeit werden ausgeblendet, sie wlirden mit ihren relativ g r o k n Fehlern die dann folgenden logarithmischen Werte stark verzerren; das Logarithmieren bringt das angenommene reaktionskinetische Potenzgesetz in lineare Form. Das Ausblenden entfernt gegebenenfalls auch negative Werte, die besonders zu Dosierbeginn aufgrund von Temperaturschwankungen bei der Auswertung berechnet werden.% rmax=max( rate); ml=find( rate
+
+
%Losung von ln(r) = ln(k) 711 ln(c1) 712 ln(c2):% A=[ones(srate( l),1) log(cir(:,1)) log(cir(:,2))]; knln2=A\log(rr);%knln2 en th at ln(k), nl und 712. %Der Logarithmus der mit den gerade gewonnenen Parametern berechneten Reaktionsgeschwindigkeit:% Ircomp=knln2( l)+knln2(2)*log(cir(:,l))+knln2(3)*log(cir(:,2)); rcomp=exp( Ircomp); plot (tr,rr,t r, rcom p) Uberzeugen sie sich, dai3 die Kurven fast nicht zu unterscheiden sind. Die gewonnenen Parameter weichen nur unerheblich von den vorgegebenen Werten ab. So ideal verhalten sich wirkliche Experimente leider meistens nicht.
7.3.3
Einzelreaktion erster Ordnung; Haufigkeitsfaktor und Aktivierungsenergie nach der Methode der kleinsten Quadrate (*)
Die Reaktion A B mit der Geschwindigkeitsgleichung T = kxA wird in einem isothermen Batchreaktor bei drei Temperaturen kinetisch vermessen. Die Versuchsergebnisse sind in der folgenden Aufstellung: --f
Versuchs-Nr 1 2 3 4 5 6 7 8 9
Z e i t (hr) 0.1
0.2 0.3 0.4 0.5 0.05 0.1 0.15 0.2
Temperatur (K) 100 100 100 100 100 200 200 200 200
xA=cA/cAO
0.980 0.983 0.955 0.979 0.993 0.626 0.544 0.455 0.225
324
7 Planen und Auswerten reaktionskinetischer Experimente
10 11 12 13 14 15
0.25 0.02
0.04 0.06 0.08 0.1
200
0.167
300 300 300 300 300
0.317 0.034 0.016 0.066
0.566
Die unabhiingigen Variablen t und T werden als fehlerfrei betrachtet; die z A-Werte seien unabhangig voneinander und haben alle gleiche Standardabwei-
chung. LSM ist daher geeignet.
Losungsvorschlag Wir benutzen leastsq aus der Optimization Toolbox oder fmins ( f i h SE). Fih leastsq wird ein M-File verlangt, das einen Vektor von Funktionswerten liefert, also die Fehler und nicht ihre Quadratsumme, fiir fmins die Quadratsumme. Dieses File nennen wir in beiden Fallen FLSM. Als Startwerte whhlen wir
par0=[750 12001; erklhren die drei Variablen als global (sie sind im File P ~ ~ L S M . M A T ) global t T x load p l l l s m verscharfen die Abbruchtoleranzen etwas und starten:
In Zehntelsekunden haben wir das Ergebnis. Das Beispiel wirkt ein wenig kiinstlich. Nur selten werden Reaktionen bei so tiefen Temperaturen kinetisch vermessen, und vor allem ist der iiberstrichene Temperaturbereich ganz ungewbhnlich groa. In den meisten Fallen mui3 man sich leider mit einem sehr vie1 engeren Temperaturbereich begniigen, Jeider " deshalb, weil das ein Grund ist fiir die haufig hohe Korrelation zwischen den gefundenen Werten von Haufigkeitsfaktor und Aktivierungsenergie; wir werden darauf noch zuriickkommen. Es ware natilrlich ein leichtes gewesen, ein etwas realistischeres Beispiel zu konstruieren. Aber dieses tut seine Dienste, und die Vergleichsmbglichkeit mit den Ergebnissen in [31],die mit anderen Rechenmethoden gewonnen wurden, ist von Vorteil. Wir haben fiir die Regression gute Startwerte genommen. Das ist berechtigt, da wir sie leicht iiber den ,,klassischen" Weg der Auswertung bekommen k6nnen: Man ermittelt die Geschwindigkeitskonstante k bei den einzelnen Temperaturen durch Auftragen von log(zA) gegen t und trligt dann log(k) gegen 1/T im Arrhenius-Diagramm auf oder macht entsprechende lineare Regressionsrechnungen. Die Ergebnisse werden sich kaum von den durch die nichtlineare Regression
7.3 Probleme und Ldsungen
325
gefundenen unterscheiden. Man wilrde eine solche aber auf jeden Fall anschlieBen, besonders wenn bekannt ist oder vermutet werden darf, d d die Meflfehler normalverteilt sind mit konstanter Standardabweichung. Diese Fehlerverteilung l a t eine besonders einfache Bewertung der Regressionsergebnisse zu. Bei der klassischen Auswertung wird diese Verteilung durch das Logarithmieren verzerrt. Bevor wir zur Bewertung ilbergehen, wiederholen wir die nichtlineare Regression mit schlechteren Startwerten:
par2=leastsq('flsrn',[100 20001) Wir erhalten eine Reihe von Warnungen iiber die schlechte Konditionierung einer Matrix (welcher?), aber zum SchluB doch wieder das ,,richtige" Ergebnis. (Im Ernstfall wiirden wir rnit diesem Ergebnis noch einmal starten.) Der Vergleich mit demselben Vorgehen in [31] mag ein kennzeichnendes Licht auf die Computerentwicklung der beiden vergangenen Dekaden werfen: Die dort benutzte IBM/360 meldete einen Uberlauf; nur durch eine Reihe zusgtzlicher MaBnahmen konnte die Rechnung mit diesen Startwerten iiberhaupt zum Abschlui3 gebracht werden. Heute wird eine robuste Regressionsroutine, implementiert auf einem PC, mit dem Problem fertig ohne Zutun des Benutzers.
7.3.4 Bewertung der Anpassung in Problem 7.3.3: Antwortflache, Kovarianzmatrix und gemeinsamer Konfidenzbereich der Parameter (**) Die Aufgabe ist durch die Uberschrift schon weitgehend beschrieben. Hier noch einige Details: Die Antwortflache sol1 enthalten: Die wahren Konturen @(O)-@* 5 c fUr c = 0.001, 0.01, 0.1, 0.5 und 1;weiter die entsprechenden Nliherungen (Ellipsen) und schliefllich die Konturlinie des Bereichs, in dem der prozentuale Fehler zwischen genauen und angentiherten Werten kleiner 5 % ist.
Losungsvorschlag Vorbemerkung: In der SE ist in dem File
matlab\ toolbox\s ymbolic\ @sym\ jacobian. m ein U P rowv; iiberpriifen Sie, ob es dem nachstehenden Ausdruck entspricht, wenn nicht , korrigieren Sie es entsprechend function v = rowv(x) % ' Convert x to character row vector, eliminating any 'array([' and v = sym(x); if all(size(v) == 1) v = [ I [ ' char(v) '1'1; else
'1).
326
7 Planen und Auswerten reaktionskinetischer Experimente
v = char(v(:).'); v([l:7 end-1 end]) = end
[I;
Zunachst beschaffen wir uns die Groi3en a* und N. Das Programm zeigt die Rechenschritte:
FLSMQS
FLSMQN
e=flsm(par);%Der Vektor par enthtilt die optimierten Parameter aus P 7.3.3; auch die Variablen t, T und x aus diesem Problem milssen als global erkltirt und im Arbeitsspeicher vorhanden sein.% PhiStern=e'*e; % Die Jacobi-Matrix berechnen wir mit Hilfe der Symbolic Math Toolbox k='parl*exp(-par2/T)'; xcs=[ 'exp(-' ,k, ' *t ) '1 ; pars=sym('parl,par2'); dxcdpars=jacobian(xcs,pars); %Das Ergebnis wird in die MATLAB-Schreibweise umgeiindert dxcdpar =[-exp(-par(2)./T) .*t.*exp(-par(l)*exp(-par(2)./T).*t),... par( l)./T.*exp(-par(2)./T).*t.*exp(-par( l)*exp(-par(2)./T).*t)]; N=2*dxcd par'*dxcdpar; Wer after Auswertungen reaktionskinetischer Experimente macht, wird sich nicht nur ein allgemeines Programm zur symbolischen Berechnung von JacobiMatrizen erstellen, sondern Programm-Module filr alle Ublichen Schritte der Auswertung - eine reaktionskinetische Toolbox, sozusagen. Die Antwortfliiche stellen wir durch Konturen dar, die im Programm KOXTUR berechnet werden und in Abb. 7.8 dargestellt sind; wenn man sich mit der MATLAB-Anweisung contour vertraut gemacht hat, sollte das Programm ohne weiteres versttindlich sein. KONTUR
%Berechnung der wahren Werte - a* Phi =[I ; ii=O;jj=O; for p l = 300:10:1300 ii=ii+l; for p2=860: 10:1060 jj=jj+l; e=flsm([pl,p2]); Phi (ii ,jj)=e'*e; end jj=O; end pal=300:10: 1300;pa2=860:10:1060; e=flsm (par);
7.3 Probleme und Losungen
327
PhiStern=e'*e; hf= figure; contour(pa1-par( 1),pa2-par(2),Phi'-PhiStern,[0.001,0.01,0.1,0.5,1]) hold; C=contour(pal-par( 1),pa2-par(2),Phi'-PhiStern,[0.001,0.01,0.1,0.5,1]); cla bel(C,[O.OOl,O.Ol,0.1,0.5,1]) plot(O,O,'*')
%Berechnung der quadratischen Ntiherung
d Hd=[I ; ii=O;ij=O; for p l = 300:10:1300 ii=ii+l; for p2=860: 10:1060 jj=jj+l; dHd(ii,jj)=[pl-par( l),p2-par(2)]*N*[pl-par( l);p2-par(2)]; end jj=O; end dHd=dHd/2; pal=300:10: 1300;pa2=860:10: 1060; contour( pal-par( l),pa2-par(2),dHd',[O.001,0.01,0.1,0.5,1],':') [C,h]=con tour( pa1-par( 1),paZpar(2) ,d Hd [0.001,0.01,O. 1,0.5,1]); clabel(C,[0.001,0.01,0.1,0.5,1]) set(h,'LineStyle',':') I,
%Berechnung der 5%igen Abweichung zwischen wahren Werten und quadratischer Ngherung% reler3=( Phi'-Phistern-dHd')./Phi'; a bsreler3=a bs( reler3); tetl=pal-par( l);tet2=paZpar(2); contour(tetl,tet2,a bsreler3,[ 0.05,lOOO I) [C,h]=contour(tetl,tet2, absreler3,[ 0.05,1000]); set( h,'LineWidth',3) drawnow Die Kovarianzmatrix ist Ve = 2a2N-'! Da wir die Standardabweichung u nicht kennen, miissen wir uns mit einem Schgtzwert s begnltgen. Es ist
Wenn wir die Werte aus den vorstehenden Rechnungen noch im Arbeitsspeicher haben, kiSnnen wir wie folgt fortfahren:
328
7 Planen und Auswerten reaktionskinetischer Experimente
Abbildung 7.8: Konturen der Zielfunktion (a - @*). - - quadratische Ntiherung. Dick umrandet ist der 5%ige Fehlerbereich. (Die Inseln entstehen durch grafische Ungenauigkeiten).
- wahr,
sq=1/13*PhiStern sq = 0.0031 s = sqrt(sq); vautheta=2*sq*inv( N) vautheta =
1.0e+004 * 6.0634 1.6559 1.6559 0.4697
Die individuellen Standardabweichungen der Parameter sind also s l = sqrt(60634) = 246.2, s2 = sqrt(4697) = 68.5 Die Korrelation zwischen den Schgtzwerten der Parameter ist corr(l,2) = 16559/(246.2 * 68.5) = 0.9812 Um einen gemeinsamen 95%-Konfidenzbereich fur die Parameter anzugeben, benutzen wir G1. (7.2); es ist F2,13(ls2)= 3.81 * 2 * 0.0031 = 0.0233, also ist die begrenzende Konturlinie gegeben durch - a* = 0.0233 Diese Kontur ist teilweise auBerhab des 5%-Bereichs; da die lineare Naherung aber konservativ ist, ist der geschhtzte Konfidenzbereich brauchbar.
7.3 Probleme und Losungen
7.3.5
329
Eigenwert-Eigenvektor-Zerlegungder Matrix N und Korrelationsmatrix der Parameter aus Problem 7.3.4
(*> Um die Matrizen N und Ve (vautheta) zu besetzen, miissen die Probleme 7.3.3 und 7.3.4 gerechnet werden. Losungsvorschlag
Eigenwert-Eigenvektor-Zerlegungder Matrix N: [U,L]=eig( N)
U = 0.9645 -0.2641 0.2641 0.9645
L = 1.Oe-004 0.0009 0 0 0.3766
*
Damit konnen wir .r(l = UT 68 und die Ellipse 1/2C&& berechnen (bitte selbst ausfilhren; wenn erforderlich: Anleitung in [31]!). Korrelationsmatrix der Parameter nach den Gln. (7.9) und (7.10): D=(diag(vautheta)). A(-0.5); Corr= diag( D)*vautheta*diag(D)
1.0000 0.9812 0.9812 1.0000
7.3.6
Parameterschatzung in DGls (*)
(Dieses Problem f d t auf einer Vorlage in einem SIMUSOLV-Prospekt.) Das Flilssigphase-Reaktionssystem A + B ZC wurde in einem Batchreaktor bei konstantem Reaktionsvolumen kinetisch vermessen. Die Ergebnisse sind in Abb. 7.9 tabellarisch zusammengestellt und in TABC.MATgespeichert. Die Geschwindigkeitsgleichungensollen einer Elementarkinetik folgen. Zu ermitteln sind die drei Geschwindigkeitskonstanten k l , k2 und k3. Die ,,-1'' in Zeile 5, Spalte 2, SOU anzeigen, d d hier ein Meawert fehlt. Losungsvorschlag global park A0 t A B C load tabc AO=0.75; parkO= [0.300;0.300;0.0200]; %nach Vorlage tic;par=leastsq('tabcfun'.parkO);toc%fmins und TABCFUN-SE filr SE%
330 7 Planen und Auswerten reaktionskinetischer Experimente 2eit t 0 2 4 6 8 10
k A 0.75 0.266 0.105 -1 0.0095 0.00525
Kom,B 0 0.412 0.520 0.470 0.420 0.377
KcnzC 0
0.0479 0.148 0.216 0.329 0.357
Abbildung 7.9: Messwerte (aus einem SIMUSOLV-Prospekt). elapsed-time = 1.7970 Par
par = 0.5026 0.1036 0.0344
[t,y]=ode45('tabcdgI',[O,lO],[AO01); tm=0:2: 10; plot(t ,y,t,A@y(:,1)-y(: ,2),tm,A,'+', tm, B, '0',tm,C,'x') hold Current plot held axis( [0 10 0 0.751)
Das Ergebnis dieser Rechnung ist in Abb. 7.10 zu sehen. Wie das Programm TABCFUN (bzw. TABCFUN-SE) zeigt, werden die berechneten Werte in der Zielfunktion durch Lasen der DGls mit den aktuellen Werten der Parameter gewonnen; der fehlende MeBwert von A wird mit einem FeNer von Null bewertet, so d d der Rechengang nicht umgestellt werden muS; da die Anfangswerte als fehlerfrei angesehen werden, ist die erste Zeile im Fehlervektor f iiberfliissig (vorletzte und letzte Zeile in TABCFUN). TA BCF UN
function f = tabcfun(pa) global park A 0 t A B C park=pa; (tc,yc]=ode45( 'tabcdgl' ,[0,10],[A0;0]); yi=interpI(tc,yc,t,'spIine');
cC=A@yi(:, l)-yi(:,2); yic= [yi ,cC] ;
f=[A,B,C]-yic; f(4,1)=0; f( 1.:)=U;
7.3 Probleme und L6sungen 331
Abbildung 7.10: Meflwerte und Regressionskurven. -
+ A,
- - o B, . . . x C.
Zur Bewertung werden dieselben Gr6flen herangezogen wie in der Vorlage; sie konnen iiber die Sensitivitgtsgleichungen (Abschnitt 7.1.2) berechnet werden (dieser Teil der Aufgabe ist fur den Ungeubten schon als mittelschwer (**) einzuschatzen) : global dhdk dhdc
%dhdc entspricht
[I
ahlas in Abschnitt
7.1.2, dhdk entspricht
d hdc= ; dhdc=str2mat(dhdc,'[-k( l),O]'); dhdc=str2mat(dhdc,'[k( l),-k(2)]'); d hdk=[]; d hdk=str2rnat(dhdk,'[-c( 1),0,0]'); d hdk=str2rnat(d hdk,' [c( 1),-c( 2), AO-c( 1)-c( 2)]
ahlag%
I);
dhdk und dhdc wurden in einer fruheren Version mit einem Programm erzeugt, das jeweils eine Leerzeile voransetzte; um die weiteren Auswertungsprogramme nicht gndern zu mussen, wird diese Leerzeile beibehalten. park=[0.50774, 0.10376, 3.6412e-021;
Dies sind die Parameter aus der Vorlage; sie werden verwendet, um die dortigen Berechnungen kontrollieren zu konnen. N=tabcfun2(park); %NLherung fur Hessesche Matrix, s. G1.(7.3)% f=tabcfun(park);
332 7 Planen und Auswerten reaktionskinetischer Experimente e=f.*f; ss=sum(sum(e)); %Summe aller Abweichungsquadrate sq=ss/( 15-3); V=2*sq*inv( N);%Kovarianz-Matrix
%Standardabweichungen der Parameter: s=sqrt( diag(V)) S=
0.0123 0.0064 0.0159 sf=sum(f);
%[31],S. 200, G1.(7-16-6), equer nach G1.(7-16-4) se-esti
s5=s/5; sqS5=sqrt(S5);
%Standardabweichungen der Residuen: se -res=diag(sqS5) se-res =
0.0042 0.0097 0.0132
(Die Anweisungen zur Bewertung sind in der Datei mengefaBt.)
TABC-BEWERT
zusam-
Zum Vergleich die Standardabweichungen der Residuen aus dem SIMUSOLVProspekt: [4.186e03;9.745e-02;1.217e-021 Obwohl die Werte praktisch ilbereinstimmen, gibt es bei der Summe der Residuen eine Diskrepanz, die offenbar ein Fehler in dem Prospekt ist: sf
sf = -0.0019 -0.0189 -0.0109
Zum Vergleich die Werte in SIMUSOLV: -1.923e-03 -1.071e-02 -1.083e-03
Die Gesamtsumme der Residuen sol1 nach der Vorlage -2.36e-02 sein; das stimmt mit diesen angegeben Werten nicht:
7.3 Probleme und Losungen
333
surn([-1.923e-03-1.071e-02 -1.083e-031 ) ans =
-0.0137
Wenn filr den dritten Wert 0.0109 statt 1.083e-03 eingesetzt wird, entspricht die Summe der dort angegebenen von -2.36e-02; die Residuen von C ergeben in der Tat die Summe -0.0109: surn(f(:,3)) %=-4.561e-03+2.797e-03-1.851e-02+2.005e-02-1.071e-02 ans =
-0.0109
Bleibt der Unterschied in den Residuen fur B: Die Summe von B ist nach den eigenen Berechnungen gleich surn(f(:,2)) as=
-0.0189
und nicht -0.0107, so dai3 sich eine andere Gesamtsumme der Residuen als 2.36e-02 ergibt, niimlich surn(sf) ans =
-3.1703e-002
Die aufgezeigten Diskrepanzen legen den Verdacht nahe, dai3 die Werte in der Vorlage zumindest Druckfehler, wenn ilicht Rechenfehler enthalten.
7.3.7 Parameterschatzung in DGls mit der Mehrzielmethode (** *, nicht SE) Die Modellfunktion d2Y = p2y - (p2 + p 2 ) sin(px) dx2
(7.33)
mit den Anfangsbedingungen y(0) = 0,
y'(0) = 7r
(7.34)
und p = 60 sol1 ilber den Parameter p an Mef3werte angepa5t werden. Alternativ sollen auch die Ftandbedingungen Y(0) = Y(1) = 0
(7.35)
334
7 Planen und Auswerten reaktionskinetischer Experimente
benutzt werden. Verrauschte Meawerte erzeugen wir uns uber die analytische LSsung mit dem ,,wahren" Parameter p = 7r:
y = sin(7rz)
(7.36)
Losungsvorschlag global tfvek trnue yrnue par global mue tmue=O:. 1:1; %Meastellen for i = 1:11 yrnue(i)=sin(pi*trnue(i))+O.O5*randn; end
%Meawerte
Jetzt versuchen wir, den Parameter p durch Anpassung der Modellfunktion an die Meawerte zu bestimmen, wobei wir zuniichst die Anfangsbedingungen y(0) = 0, y'(0) = 7r nehmen. Als Stutzstellen fih die Mehrzielmethode whhlen wir die Meastellen, tfvek=tmue; OJoStutzstellen tfve k( 1)=[];
berilcksichtigen aber schon bei der Programmierung des UPS BOCKFCON fUr die Optimierroutine comtr, daa Me& und Stiitzstellen i. a. unterschiedlich sind. Als Startwerte an den Stutzstellen wahlen wir zunachst die ,,richtigen" Werte der analytischen LGsung, xpsO=[sin( pi*trnue'); pi*cos( pi*trnue'); 11;
und setzen sehr enge Grenzen filr diese Parameter. Der eigentliche Modellparameter (par) wird aber nur grob eingegrenzt. vlb=[-.l*ones( 11,1);-3.2*ones( 11,l);Ol; vub=[l. l*ones( 11,1);3.2*ones( 11,1);6.4];
Wir haben 22 Nebenbedingungen in Gleichheitsform. Die Modellgleichung iiberfilhren wir in zwei DGls erster Ordnung und behandeln dieses DG1-System wie gesagt zungchst als Anfangswertproblem; das machen wir amateurhaft im Programm BOCKFCON durch Wahl der entsprechenden Zeile. BOCKFCON
function [f,g] = bockfcon(x) global tfvek tmue ymue par par=x(23); tf=O;iz=l;g=[];f=O;
7.3 Probleme und Losungen
335
%Abschnittsweise Integration von Stutzpunkt zu Stlltzpunkt zwischen 0 und 1%
oJo*******************************************************
while tf < 1 tO=tf;tf=tfvek( iz); xO=[x( iz),x(iz+II)]; [t,y] =ode45(' bockdgl' ,[to tf],xO); sit=size(t); ind=find(tO <= tmue & tmue < tf); f=f+sum( (interpl(t,y(:,l),tmue(ind),'spline')-ymue(ind)). A2); iz=iz+l;
g=[g;y(sit(l),l)-x(iz);y(sit(l),2)-x(iz+ll)]; St Utzstellen%
%Stetigkeitsbedingungen a n den
end
~o********************************************************* g=[g;x( l);x( 12)-pi]; % Anfangswertproblem % g=[g;x( l ) ; x ( l l ) ] ; % Randwertproblem if max(tmue) == 1 siy=size(ym ue); f=f+(ymue(siy( 1))-y(sit( l), 1))-2; end
Fur p setzen wir 60 ein, dann kbnnen wir die Optimierung starten: options( 13)=22; %Anzahl der Nebenbedingungen options( 1)=1; mue = 60; tic;[xps,options]=constr(' bockfcon',xpsO,options,vlb,vub);toc
f -COUNT
FUNCTION
MAX(g)
6808.29 24 11448.5 4243.37 49 1329.1 4514.04 73 5656.09 97 0.0180329 0.00757056 121 0.0180228 2.27347e-008 145 0.0180221 2.27301e-008 169 0.0180217 2.27216e-008 171 0.0180217 2.27217e-008 Optimization Converged Successfully Active Constraints:
STEP 1 0.5 1 1 1 1 1 0.5
Procedures
infeasible infeasible mod Hess mod Hess(2) mod Hess(2) mod Hess(2) mod Hess(2)
Alle 22 sind aktiv; sie werden als Spaltenvektor ausgegeben, wurden aus Platzgriinden aber herausgenommen. elapsed-time = 1.0366e+003 % a d 486e (50s auf Pentium 11)%
336
7 Planen und Auswerten reaktionskinetischer Experimente
Wir berechnen jetzt mit den optimalen Parametern den Kurvenverlauf und plotten ihn zusammen mit den Meflwerten (Abb. 7.11): [tf,yl,y2]=bockk~t~(xp~); plot(tf,yl,tmue,ymue,'o')
1.2
-0.2;
0.2
0.4
0.6
0.8
I
1
X
Abbildung 7.11: Regression unter Verwendung der beriichtigten Bulirsch-DG1, formuliert als Anfangswertproblem, mit Hilfe der Mehrzielmethode. o simulierte verrauschte Mei3werte.
Im Ernstfall kunnen wir natilrlich nicht von einer analytischen Losung ausge hen. Wir konnen uns aber an den Meflwerten orientieren - das ist j a gerade die Starke dieser Methode - urn Schatzwerte fur die Stutzstellen und ihre Grenzen zu bekommen. Wir legen ein ausgleichendes Polynom durch die Meflwerte: p4=polyfit(tmue,ymue,4);
ys=polyder( p4); xpsO2=[ polyval(p4,tmue),polyval(ys,tmue),11; plot(tmue,poIyvaI(p4,tmue),tf,yI,tmue,ymue,'o') Die Anpassung (Abb. 7.12) scheint also brauchbar. Mit den Grenzen sind wir versuchsweise recht groflzilgig: vlb=[-.5*ones( 11,1);-5*ones(11,1);0]; vu b=[ 1.5*ones(11,1);5*ones(11,1);6.4]; Nun starten wir die Optimierung, wobei wir die Modellgleichung wiederum als Anfangswert-DG1 behandeln:
7.3 Probleme und Ltlsungen
337
0
A 0.2 0.4 0.6 0.8
-0.20
X
Abbildung 7.12: Anpassung der MeOwerte f i r die Bulirsch-DG1 durch ein Polynom 4. Grades. o simulierte MeOwerte.
tic;[xps,options]=constr(’ bockfcon’,xps02,options,vlb,vub);toc
f -COUNT FUNCTION MAX(g1 24 11133.4 6946.19 48 121716 20929.9 72 0.0251006 0.0871829 96 0.0249749 2.23203e-007 97 0.0249749 2.232038-007 Optimization Converged Successfully
STEP Procedures 1 1 1 1 1
infeasible
mod Hess mod Hess
elapsed-time = 7.2249e+002
Die Optimierung konvergiert zu denselben Werten wie oben (auf dem Pentium I1 in Minutenschnelle). Sollte das bei Ihnen nicht der Fall sein, v e r a d e r n Sie den Wert fiir den Modellparameter par etwas - der Verlauf der Optimierrechnumg kann bei diesem empfindlichen System stark von den Zufallsfehlern abhiingen, mit denen wir oben die Meflwerte simuliert haben! Versuchen wir jetzt, die Modellgleichung in ihrer ursprwglichen Form, also als Randwert-DG1 zu verwenden; dazu wtihlen wir die entsprechende Zeile in BOCKFCON und starten erneut:
338
7 Planen und Auswerten reaktionskinetischer Experimente
tic; [xps,options]=constr(' bockfcon' ,xps02,options,vlb,vub);toc f -COUNT
FUNCTION
MAXCg)
6946.19 24 11160.9 48 5193.15 4350.83 72 17.1691 209.213 96 4.83477 0.219404 120 4.83523 4.52869e-007 144 4.8352 4.57888e-007 168 4.83509 5.46448e-007 169 4.83509 5.46448e-007 Optimization Converged Successfully
STEP Procedures 1 1 1 1 1 1 1 1
infeasible mod Hess
mod mod mod mod
Hess Hess Hess Hess
elapsed-time = 1.1551e+003
Wiederum Konvergenz, aber leider zu einem falschen Ergebnis: XPS
xps = Columns 1 through 7 0.0000 0.0085 0.0170 0.0255 0.0339 0.0424 0.0509 Columns 8 through 14 0.0594 0.0678 0.0761 0.0000 0.0848 0.0848 0.0848 Columns 15 through 21 0.0848 0.0848 0.0848 0.0847 0.0847 0.0846 0.0720 Columns 22 through 23 -5.0000 0.0848
Wir konnen die Grenzen sehr viel enger setzen und so versuchen, die Optimierung von dem falschen flachen Profil fernzuhalten: Ibs=[polyval( .7*ys,trnue( 1:5)),-. 1,polyval( 1.3*ys, trnue( 7: l l ) ) ] ; %Zur Erinnerung: ys steht fur y'% Ib=polyval( .7*p4,trnue); vlb=[lb';lbs';O]; u b= polyva I( 1.3*p4, t rnue) ; ubs=[polyval(l.3*ys,trnue( 1:5)),.l,polyval(0.7*ys,trnue(7:11))]; vu b=[ub'; ubs';6.4]; vub( l)=.l;vub( 11)=.1;
Mit der Anfangswert-DG1 erhalten wir dieselben Ergebnisse wie mit weiteren Grenzen, aber sehr viel schneller (363 s auf dem 486er); als Randwertproblem:
7.3 Problerne und Ldsungen
339
xpsO2(23)=1; %Wie bisher
tic;[xps,options]=constr( ’bockfcon’,xps02,options,vlb,vub);toc f -COUNT FUNCTION MAXCg) STEP Procedures 24 11564.2 1 infeasible 6997.41 48 4787.16 4172.62 1 infeasible 72 7.86859 101.692 1 infeasible 96 5.14581 0.00365374 1 Hessian modified; infeasible 97 5.14581 2.0916e-010 1 Hessian modified; infeasible Warning: No feasible solution found. elapsed-time = 250.7900 Jetzt bekommen wir tiberhaupt keine Ldsung. Wir versuchen einen andern Startwert fur den Modellparameter, etwa in der Mitte des geschgtzten Bereichs: xpsO2(23)=3.7;
tic;(xps,options]=constr(’bockfcon’,xps02,options,vlb,vub);toc f -COUNT 24 48 72 96 120 151 178 215 249 284 319 352 384 417 450 482 512 540
2169 2193 2220 2244 2270
FUNCTION
MAX(g)
10240.9 6102.21 3.63889 666.938 0.0260423 5.87876 0.0201224 0.0355544 0.0201037 5.88161e-006 0.0201032 5.86478e-006 0.0201017 5.56635e-006 0.0201015 5.56883e-006 0.0201012 5.58635e-006 0.0201008 5.61017e-006 0.0200999 5.73908e-006 0.0200977 6.55682e-006 0.0200934 9.74713e-006 0.0200871 1.65902e-005 0.0200809 2.34078e-005 0.0200684 5.05952e-005 0.0200569 7.33198e-005 0.0200257 0.000243545
0.0183732 0.0182853 0.0182415 0.018182 0.0181278
0.0049891 0.00561455 0.00650246 0.00306506 0.00543272
STEP Procedures 1 1 1 1 1 0.00781 0.125 0.000122 0.000977 0.000488 0.000488 0.00195 0.00391 0.00195 0.00195 0.00391 0.0156 0.0625
0.0625
1 0.125 1 0.25
infeasible
Hessian Hessian Hessian Hessian
modified modified modified modified 2x
Hessian Hessian Hessian Hessian Hessian Hessian Hessian Hessian Hessian Hessian
modified modified modified modified modified modified modified modified modified modified
2x 2x 2x 2x 2x 2x 2x 2x 2x 2x
Hessian modified 2x Hessian modified 2x Hessian modified 2x Hessian modified Hessian modified
340 7 Planen und Auswerten reaktionskinetischer Experimente 0.5 Hessian modified 2x 2295 0.0180539 0.00977354 1 Hessian modified 2319 0.0180221 0.00116216 Maximum number of function evaluations exceeded; increase OPTIONS(l4)
XPS
xps = Columns 1 through 7 0.0000 0.3077 0.5856 0.8066 0.9494 1.0000 0.9535 Columns 8 through 14 0.8146 0.5965 0.3206 0.0000 3.1280 2.9762 2.5356 Columns 15 through 21 1.8489 0.9827 0.0212 -0.9424 -1.8145 -2.5105 -2.9649 Columns 22 through 23 -3.9417 3.1280
Neustart mit dem bisher erreichten xps als Startwerte: tic;[xps,options]=constr('bockfcon',xps,options,vl b,vub);toc
f-COUNT FUNCTION MAX(g1 24 0.0180221 0.00116216 48 0.0180212 3.17954e-007 72 0.0179836 0.00244152 96 0.0180216 0.00237542 120 0.0180201 5.58513e-007 144 0.018019 2.21248e-006 168 0.0180183 9.31317e-007 192 0.0180088 0.000144541 216 0.0179831 0.00113922 217 0.0179827 1.43379e-011 Optimization Converged Successfully
STEP 1
1 1 1 1 1 1 1 1 1
Procedures Hessian modified
Hessian Hessian Hessian Hessian Hessian Hessian
not updated modified modified 2x modified modified 2x modified 2x
elapsed-time = 517.8900 XPS
xps = Columns 1 through 7 0.0000 0.3076 0.5854 0.8064 0.9492 1.0000 0.9537 Columns 8 through 14 0.8150 0.5972 0.3214 0.0000 3.1270 2.9754 2.5352 Columns 15 through 21 1.8491 0.9836 0.0228 -0.9402 -1.8121 -2.5082 -2.9632 Columns 22 through 23 -4.0014 3.1270
7.3 Probleme und Losungen
341
Schrittchen fiir Schrittchen qualt sich die Optimierung ihrem (richtigen) Ziel entgegen. Abgesehen von dem schleppenden Verlaufi Der Einfld3 des Startwerts des Modellparameters ist ein markantes Gegenbeispiel zur Vermutung von Bock und Mitarbeitern, d d die Einbettung in die Mehrzielmethode den Einflufi schlecht gewahlter Modellparameter zuruckdrangen ktinnte. Naturlich hatte jeder Erfahrene die schleichende Optimierung f r h e i t i g abgebrochen und die Einstellungen fur die Optimierung geiindert. Wozu brauchen wir so scharfe Abbruchkriterien? Schlie3lich wollen wir weder die Zielfunktion noch die Parameter mit einer unsinnigen Genauigkeit erhalten. Versuchen wir grtibere Abbruchskriterien: options(~)=~e-O2;options(3)=~~O2;options(~)=~.~O3; tic; [xps,options]=constr('
bockfcon',xpsOZ,options,vlb,vub) ;toc
f -COUNT FUNCTION MAxcg3 24 10240.9 6102.21 48 3.63889 666.938 72 0.0260423 5.87876 96 0.0201224 0.0355544 97 0.0201037 5.8816le-006 Optimization Converged Successfully
STEP Procedures 1 1 1 1 1
infeasible
Hessian modified Hessian modified
elapsed-time = 238.3200 XPS
xps = Columns 1 through 7 0.0000 0.3102 0.5899 0.8113 0.9526 1.0000 0.9486 Columns 8 through 14 0.8037 0.5794 0.2980 0.0000 3.1545 2.9988 2.5473 Columns 15 through 21 1.8443 0.9593 -0.0204 -0.9980 -1.8771 -2.5710 -3.0093 Columns 22 through 23 -2.3798 3.1545
In kiirzester Zeit haben wir eine brauchbare Ldsung. Wir sehen an diesen Variationen, d d in kritischen Fallen das Optimieren einiger Erfahrung bedarf : Parameter-Startwerte, Grenzen, Abbruchkriterien und eventuell andere Einfld3grbflen milssen so sorgfgltig wie mtiglich gewahlt werden, wobei man meistens ohne einiges Herumprobieren nicht auskommt (zumindest nicht als mathematisch htichstens durchschnittlich geschulter Anwender!). Es ist erfreulich, d d das Bocksche Verfahren mit den Software-Produkten von MATLAB so gut funktioniert. Das spricht sicherlich auch fih ihre Gute und Robustheit. Aus den einschlagigen Veroffentlichungen von Bock und Mitarbeitern kann man leicht den Eindruck gewinnen, d d man nur mit ganz speziell zugeschnittenen Programmen erfolgreich sein ktinnte. In ihren Arbeiten wird
342
7 Planen und Auswerten reaktionskinetischer Experimente
an vielen Stellen auf ihr Programmpaket PARFIT hingewiesen. Leider gelang es nicht, eine Kopie zu erhalten. So kann nicht beurteilt werden, ob vielleicht rnit diesem Programm kiirzere Rechenzeiten zu erzielen sind. Die vergleichsweise langen Rechenzeiten ntimlich legen es nahe, das Verfahren nur einzusetZen, wenn es m c h wie bei der Bulirsch'schen DG1 (nahezu) unmdglich ist, die Integration herkummlich durchzufilhren. Man versuche es zumindest bei Anfangswert-DGls immer zuntichst mit der ,,klassischen" Methode, also mit der Kombination (unbeschrtinkte und meist schnelle) Optimierroutine und DG1Ltiser. Allerdings sollte man vie1 daransetzen, muglichst gute Startwerte fiir die Modellparameter zu finden, bei reaktionskinetischen Messungen am besten ilber eine numerische Differentiation der Konzentrations-Zeit-Kurven auf Basis Polynom-, Spline- oder einer anderen geeigneten Anpassung, vor allem rnit rationalen Funktionen, so wie es in einigen Beispielen dieses Buches exerziert wird. Das k a man ~ als alternative Mtiglichkeit sehen, die MeBwerte im Rahmen von Regressionsrechnungen auch bei der L6sung der DGls nicht ungenutzt zu lassen.
7.3.8 Differentielle Auswert ung von Konzentrations-ZeitKurven rnit Polynomen und Splines (*, SE nur rnit Polynomen) Ein Produkt P kann aus A und B mit Hilfe eines homogenen Katalysators in einer Flilssigphasereaktion hergestellt werden. Aus den prgparativen Arbeiten wurde geschlossen, daB es sich um eine Folgereaktion handelt: A+B->P A+P->U Erste kinetische Untersuchungen in einem Labor-Batchreaktor variieren die Anfangskonzentrationen von A und B, die Katalysatorkonzentration (Faktor C) und die Temperatur (Faktor D) nach einem vollsttindigen Faktorplan, der im folgenden zusammen rnit den Niveau-Werten der vier Faktoren wiedergegeben ist. Faktor A
B
C
D
-1 1 -1 1 -1 1 -1
-1 -1 1 1 -1 -1 1
-1 -1 -1 -1 1 1 1
-1 -1 -1 -1 -1 -1 -1 -1 1 1
I
I
I
-1 1 -1 1
-1 -1 1 1
-1 -1 -1 -1
I 1
7.3 Problerne und Losungen
-1 1 -1 1
Nive au-Wert e A (mol/l> + 40
-
1 1 1 1
-1 -1 1 1
1 1 1 1
B (mol/l>
20
343
C (mol/l>
+
2
+
-
1
- 0.5
1.0
D (mol/l> +
175
- 165
MeOwerte wurden bei t = 0, 80, 160, 320, 640 und 1280 Minuten erhoben; die zugehbrigen Konzentrationswerte von B und P sind im File CBMOAUF.MAT in den (6,16)-Matrizen CBTMVund C P T M V enthalten. Versuchen Sie, an die Konzentrations-Zeit-Werte der einzelnen Versuche Polynome oder Splines anzupassen; fur die Spline-Anpassung muO die Spline Toolbox vorhanden sein. (Wer bei der Vollversion die SEProgramme verwenden mochte, denke bitte daran, daB sie bei gleichem Namen verschiedenen Inhalt haben konnen!) Losungsvorschlag MATLAB stellt zur Anpassung Polynome zur Verfiigung. Polynome sind aber fiir m e r e Zwecke wenig geeignet. W&rend sich z. B. die B-Konzentrationen der ersten MeOreihe noch gut durch ein Polynom zweiten Grades anpassen lassen (Abb. 7.13),
tm=[0,80,160,320,640,1280]; pk=polyfit(tm',cBtmv(:,1),2);
tp=0:20: 1300; plot(tp,polyval(pk,tp),tm',cBtmv(:,l),'o')
zeigt sich bei der zweiten MeOreihe ein Polynom zweiten Grades schon weniger geeignet (Abb. 7.14). Besser ist hier der Grad drei (Abb. 7.15): pk=polyfit(tm'.cBtmv( :,2),3); plot(tp,polyval(pk,tp),tm',cBtmv(:,2),'o')
Vollig ungeeignet ist ein Polynom vierten Grades (Abb. 7.16): Die zehnte MeOreihe l d t sich nicht mehr vernilnftig durch ein Polynom anpassen (bitte ausprobieren!). Mit der Spline-Funktion csups aus der Spline Toolbox gelingt das sehr gut, wie der Vergleich in Abb. 7.17 zeigt: Der Spline kann durch einen Gewichtsfaktor zwischen 0 und 1 mehr oder weniger ausgleichend gelegt werden: 1 bedeutet interpolierender Spline, der durch die MeOpunkte geht, 0 ist das andere Extrem und erzeugt eine ausgleichende Gerade. Wer nicht htiufig Splines anwendet, wird sich wohl kaum zum Kauf der Toolbox entschlieflen.
344
7 Planen und Auswerten reaktionskinetischer Experimente
500
tin min
1000
1 00
Abbildung 7.13: Anpassung der cB-Werte des ersten Versuchs durch ein Polynom 2. Grades.
500
tin min
1000
1500
Abbildung 7.14: Anpassung der cB-Werte des zweiten Versuchs durch ein Polynom 2. Grades.
7.3 Probleme und Losungen
345
1.2-
Abbildung 7.15: Anpassung der ce-Werte des zweiten Versuchs durch ein Polynom 3. Grades.
0.2-
Abbildung 7.16: Anpassung der cB-Werte des zweiten Versuchs durch ein Polynom 4. Grades.
346 7 Planen und Auswerten reaktionskinetischer Experimente
00
Abbildung 7.17: Anpassung der cB-Werte des 10. Versuchs durch Spline (links) und Polynom 2. Grades (Achsen wie in Abb. 7.16).
Um die Anpassung etwas zu automatisieren, wurde das Program CBMOAUDE geschrieben (s. Problem 7.3.9). In der vorliegenden Form ladt es die Meawerte von B und P zusammen mit den Zeitpunkten, und fragt dann nach einer ersten Festlegung des Spline-Gewichtsfaktors und nach einer Polynomordnung, die es verwendet, um entsprechende Anpassungen in einem Grafikfenster nach Art der vorhergehenden Abbildung darzustellen. Man hat dann die Moglichkeit, Gewichtsfaktor oder Polynomordnung so lange zu Wdern, bis eine Darstellung zufriedenstellend ausfkillt; diese kann man mit der Textvariablen sch = 'spli' oder sch = 'poly' filr die Differentiation auswahlen und gelangt zur nachsten Mefireihe. Nach Beendigung des Programms stehen in der Matrix dcBmv die Ableitungen nach der Zeit an den Meastellen zur Verfiigung. (Dieses Programm ruft man besser nicht im Notebook auf, sondern im MATLAB-Fenster.) Die Art der Auswahl von Funktionstyp und Parametern ist auf die Dauer etwas umsttindlich. Eine bequemere Menufiihrung als mit keyboard konnte man auf verschiedene Weise erreichen, schlicht aber wirksam z. B. mit dem menuBefehl. Fur die hkiufige Auswertung reaktionskinetischer Experimente hat sich ein komfortables GUI im Rahmen einer reaktionskinetischen Toolbox bewtihrt, mit dem man unter verschiedenen Anpassungsfunktionen und Konfigurationen w m e n kann (s. Anhang). Polynome werden in CBMOAUDE nur zur Demonstration benutzt. Bei dicht liegenden Mei3werten kann man mit gleitenden Polynomen arbeiten, bei spkirlichen wie hier wird man von vornherein Splines vorziehen oder andere, zweckmaaigere Anpassungsfunktionen wahlen, wie z. B. rationale Funktionen. Davon
7.3 Probleme und Ldsungen
347
handeln die beiden niichsten Aufgaben, in denen dann mit Hilfe linearer Regressionsrechnungen auch Geschwindigkeitsgleichungen und kinetische Parameter filr die beiden Reaktionen ermittelt werden.
7.3.9 Differentielle Auswertung von Konzentrations-ZeitKurven mit ausgleichenden Splines (*, nicht SE) Siehe das vorhergehende Problem! Zur Bearbeitung nach dem LUsungsvorschlag muil die Spline Toolbox vorhanden sein. Die Konzentrations-Meirte filr B und P in CBMOAUF sowie die aus B und P berechenbaren U-Konzentrationen sollen mit Hilfe von ausgleichenden SpIines ausgewertet werden. Dazu kann man - wie im vorhergehenden Problem beschrieben - CBMOAUDE verwenden und nur die Spline-Funktion wtihlen. zur Ubung ware es aber angebracht, dieses Programm entsprechend zu modifizieren und dabei auch das interaktive Arbeiten etwas zu erleichtern. Versuchen Sie es wie immer zunachst selbst. Dann kunnen Sie CPMOAUDE und CUMOAUDE lesen oder im MATLAB-Fenster starten. An die so gewonnenen Bildungsgeschwindigkeiten sollen filr die beiden Reaktionen Geschwindigkeitsgleichungen in Form von Potenzgesetzen angepaat werden.
Losungsvorschlag Die U-Werte erhalten wir mit load cbmoauf %enthtilt die Me%wertevon B und P zu den Zeitpunkten t m cUtrnv=ones( 6,1)*cBtrnv( 1,:)-cBtrnv-cPtrnv;
Die numerische Differentiation der B-, P- und U-Werte kann nach dem Muster von CPMOAUDE erfolgen (das noch stark verbesserungsfwg ist): CPMOAUDE
%csaps, fnder und fnval sind M-Files aus der Spline Toolbox load cbrnoauf h=figure; tp=0:20: 1300; dcPmv=[]; % f a die differenzierten Werte psp=input(’Splineordnung psp’) pspold=2*psp; for i = 1:16 while psp -= pspold %Abbruch der while-Schleife durch Eingabe der vorigen
Polynom- Or dnung % pspold=psp; sp=csaps( tm’ ,cPtrnv(: ,i),psp); %angepaBter Spline
plot(tp,fnvaI(sp,tp),trn’,cPtmv(:,i),’o’) psp=input(’Splineordnung psp’) end %while
348
7 Planen und Auswerten reaktionskinetischer Experimente dcs=fnder(sp); %Differentiation der Spline-F'unktion dcPm=fnval(dcs,tm'); %Werte an den Stellen tm dcPmv=[dcPmv,dcPm]; pspold=2*psp; end %for
Die Anpassung der B- und P-Werte gelingt einigermaaen gut. Dagegen sind die U-Werte mit ausgleichenden Splines nicht vernihftig anzupassen, weil es nicht gelingt, die Kurven mit dem Anstieg Null starten zu lassen - zumindest in csaps ist das nicht vorgesehen. Die folgende weitere Auswertung geht in der Schwierigkeit etwas iiber die Kurvenanpassung hinaus: Wir versuchen nun, Potenzgesetze fiir die beiden Reaktionen an die Bildungsgeschwindigkeiten und bzw. an die Reaktionsgeschwindigkeiten r1 und 7-2 anzupassen:
%
%
(7.37)
(7.38) Logarithmieren dieser Gleichungen liefert jeweils ein uberbestimmtes lineares Gleichungssystem der Form Ax = b. Der Vektor x enthtilt die unbekannten kinetischen Parameter: Logarithmus des Hgufigkeitsfaktors, Aktivierungsenergie (geteilt durch die Gaskonstante) und die individuellen Reaktionsordnungen. b enthglt die Logarithmen aller 6*16 = 96 durch die numerische Differentiation gewonnenen differentiellen Mei3werte: ln(-%) bzw.ln(-% Die (96,5)-Matrix A enthtilt in der ersten Spalte Einsen, in den folgenden Spalten die reziproken TemperaturmeDwerte und die Logarithmen der jeweiligen Konzentrationwerte. Die Regressionsrechnungen f i r die beiden Geschwindigkeitsgleichungenr1 und 7-2 sind im File CBMOAULR enthalten. Fiir einen Vergleich der wahren (in CTCMAT) und angepai3ten Ableitungen mit den Regressionswerten kljnnen die Files CBDCBDT und CBDCPDT gestartet werden (im MATLAB-Fenster). Insgesamt gesehen fiihren die Anpassungen der B- und mit Abstrichen auch der P-Werte zu befriedigenden Ergebnissen. Bei der Auswertung der P-Werte m d man zuntichst unzul&sige Werte entfernen. Die Differenzen = (= rz) kbnnen wegen der Mei3fehler negative Werte annehmen. Diese Zeilen werden aus den Regressionsgleichungen entfernt. Auch die Zeilen der Matrix A in C B M O A U L R , in denen die Anfangswerte von c p (= 0) auftreten, miissen entfernt werden. Das kann man auf verschiedene Weise erreichen. Hier werden die Anfangswerte auf einen relativ kleinen Wert gesetzt und dann ihre Logarithmen aus A entfernt.
%).
9
-% 9
7.3 Probleme und Losungen
349
CBMOAULR
%Zur Auswertung milssen die numerischen Ableitungen an den Mefistellen %tm vorhanden sein: dcBmv, dcPmv, dcUmv tm=[O 80 160 320 640 12801; tv=0:20: 1280; load cbmoauf % cBtmv, cPtmv, tm: die B- und P-Mefiwerte load cbmodauf %fak: die Niveau-Matrix des Faktorplans cPtmv( l,:)=le-10; %Die (Anfangs-)Werte der Variablen werden besetzt ..........................................................
fa k2=fa k+2;
ind3=find(fa k2==3); fak2( ind3’)=2*ones(size(fa k2( ind3’))); cAOlu=[20 40];cBOlu=[l 2];cClu=[0.5 l];Tlu=[165 175]+273.16; for i = 1:16 cAOv(i)=cAOlu(fa k2( i,1)); cBOv(i)=cBOlu(fa k2(i,2)); cCv(i)=cClu(fak2(i,3)); Tv(i)=TIu(fak2(;,4)); end cAOvm=ones(6,l)*cAOv; cB0vm=ones(6,l)*cBOv; cCvm=ones(6,l)*cCv; Tvm=ones(6,1)*Tv; Tquer=170+273.16;
~o******************************************************** yoAuswertungder B-Werte****** *** * ** ** * * ** ** * * * * ** ** * * * * ** b=fog(-dcBmv( :)); b=real( b); cAmv=(cAOvm( :)-2*(cBOvm( :)-cBtmv( :))+cPtmv( :)); A=[ones( 6*16, l), l./Tvm( :),log(cAmv)]; A=[A,log(cBtmv(:)),log(cCvm(:))]; xl=A\b;
.........................................................
%Auswertung der P-Werte, falls die Ableitungen (in dcPmv) geladen sind
.........................................................
if exist(’dcPmv’,’var’) -= 0 %Fiir werden die Regressionswerte verwendet dc bdt =-exp(xl( l))*exp(xl( 2)./Tvm(: )).*cAmv. x l ( 3) .*cBtmv( :)... . x1( 4) .*cCvm( :) . xl(5); b2=-dcbdt-dcPmv( :); iz=find(b2<=0); b2(iz)=D; A2=[ones( 6*16, l), l./Tvm( :),log(cAmv)]; A2=[A2,log(cPtmv(:)),log(cCvm(:))]; A2( iz, :)=[I;
%
A
350 7 Planen und Auswerten reaktionskinetischer Experirnente [il,ir]=find(A2==log( A2( il,:)=[]; b2(il)=[; b2=log( b2); x2=A2\ b2; end
le-10));
.........................................................
yoAuswertung der U-Wer te* ** * * **** * ***** **** * *** * *** * ** ***
if exist('dcUrnv','var') -= 0 b3=dcUmv(:); iz=fi nd(b3< =0) ; b3(iz)=u; A3= [ones(6*16,l),1./Tvm (:),log(cAmv)] ; A3= [A3,log(cPtrnv( :)),log(cCvrn( :))I ; A3( iz,:)=o; [il,ic]=find(A3==log(le-10)); b3(il)=[];A3(il,:)=[]; b3=l0g( b3); ~ 3 = A 3 \b3; end Die U-Werte lassen sich aus den angefuhrten Griinden nur unzureichend mit ausgleichenden Splines auswerten (bitte selbst ausprobieren!). Fiir sie sollten andere Methoden herangezogen werden. Ein Vergleich der kinetischen Parameter aus den Regressionsrechnungen mit den wahren (vorgegebenen) Werten erfolgt, nachdem im folgenden Problem auch die U-Werte ausgewertet sind.
7.3.10
Differentielle Auswertung von Konzentrations-ZeitKurven mit rationalen Funktionen (*)
Die Meflwerte der beiden vorigen Aufgaben sollen im Hinblick auf die U-Konzentrationen mit Hilfe rationaler Funktionen ausgewertet werden.
Losungsvorschlag Zunachst werden drei Variable als global erkltirt, die im folgenden noch erlautert werden: global rf crn t m load cbrnoauf % cBtmv, cPtmv, tm: die B- und P-Meflwerte%
Wir benutzen CBMOAULR (s. vorige Aufgabe), um die Anfangswerte den Mef3reihen zuzuordnen; damit es keine Fehlermeldung gibt, miissen wir vorher die Ableitungen von B aus den vorigen Aufgaben laden; auch laden wir die Ableitungen von P aus den beiden vorigen Aufgaben fiir die anschlief3ende Regression:
7.3 Probleme und Losungen
351
load dcBmv load dcPmv cbmoaulr
D a m konnen wir die U-Werte berechnen: cUtmv=cBOvm-cBtmv-cPtmv;
Die Anpassung einer rationalen Funktion wird anhand der ersten Mefireihe vorgeftkt: cm=cUtmv(:, 1);
Die rationale Funktion wird ah String eingeftihrt, ebenso das Ztihler- und das Nenner-Polynom: nu mp= ’ [par ( 1) ,0,01’ ;denp= ’ [par(2), 0, par(3)]’ ; rf=[’polyval( ‘,nump,’,tm)./’,’polyval(’,denp,’,tm)’];
Der Grad der Polynome wird fiir eine S-Kurve mit Anfangssteigung Null gewahlt, entsprechend der Abb. 7.3. Schgtzwerte fiir die Parameter ergeben sich aus den Gr8fienordnungen von cm und tm: pad= [1.5e-005 1.5e-005 1.0000e+002]; par=leastsq(’cbculrf’,pad) %fmins bei SE (gibt andere Parameter!)% par = 3.2245e-005 1.0713e-004 1.0000e+002 plot( tm, eval( r f ) ,t m ,cm,‘0’)
Abbildung 7.18: Rationale Funktion angepdt an Mefiwerte c ” ( t , ) .
352
7 Planen und Auswerten reaktionskinetischer Experirnente
Die angepdte Kurve in Abb. 7.18 mui3 nach der Funktionsgleichung mit dem Anstieg Null starten; dadurch konnen sich die offensichtlichen Meafehler des zweiten und dritten Meawerts nicht so stark auswirken wie bei den Splines. Mit dem File CBRAFLR werden alle 16 Mei3reihen bezilglich U augewertet. Die Variablen cUrv und und dcUmv enthalten die Regressionswerte fiir U und die Ableitung. CBRAFLR
global rf cm t m %im Arbeitsspeicher muessen vorhanden sein: %cUtmv, tm, nump, denp, rf par=[2e-005 2e-005 1.0000e+002]; dcUmv=U;cUrv=U; for i = 1:16 crn=cUtmv(: ,i); pad=par; par=leastsq('cbculrf', pad); cUr=eval( rf); c Urv= [CUrv,c Ur '1; [Q,D]=eval(('polyder(',nump,','denp,')']); dcUm=polyval(Q,tm')./polyval(D,tm');
dcUmv=[dcUmv,dcUm]; end
Die folgende weitere Auswertung geht in der Schwierigkeit etwas fiber die Kurvenanpassung hinaus (falls Sie sie selbst entwerfen und programmieren und nicht nur die folgenden Programme des Losungsvorschlags aufrufen): Ausfiihren von CBMOAULR berechnet nun auch die kinetischen Parameter der zweiten Geschwindigkeitsgleichung,1-2, aus den U-Werten; sie sind im x3-Vektor in der Reihendolge ln(kO), -E/R, Reaktionsordnungen, ebenso wie der x2-Vektor die Auswertung der P-Werte enthtilt und der xl-Vektor die Auswertung der BWerte. Tabelle 7.2 f d t die Ergebnisse zusammen. Wiihrend die B-Werte und die ilber Bilanzen erhaltenen U-Werte sehr gute Ergebnisse liefern, ist das Ergebnis bei den P-Werten weniger befriedigend. Die Summierung der differentiellen Werte und vergroaert offenbar die MeDfehler uber die numerische Differentiation hinaus noch einmal so stark, daD die Ergebnisse nur bedingt schlitssig erscheinen. Die Maanahme, statt der individuellen Meawerte die Regressionsgleichung ftir 7-1 heranzuziehen (s. CBMOAULR), bringt auch nicht gentigend Abhilfe. Bei der Berechnung der U-Konzentrationen aus den gemessenen B- und P-Werten vergroijert sich der MeDfehler zwar auch, bleibt aber in ertrtiglichen Grenzen. Noch besser wtire es gewesen, die U-Konzentrationen im Verlauf der Mefireihen ebenfalls zu bestimmen (gleiche Varianzen vorausgesetzt). Diese Beispiele zeigen wohl zur Genilge, daB man bei kinetischen Messungen und ihren Auswertungen mit besonderer Umsicht zu Werke gehen mui3. Fiir
9
9
%
7.3 Problerne und Losungen
353
Tabelle 7.2: Vergleich der kinetischen Parameter. Parameter wahre Werte aus B aus P aus U kl0 9.28e11 1.3e10 El 35580 32238 nA1 2 2.1 71131 1 0.99 nc1 0.5 0.59 k20 3.99e03 2.85 5.85e03 E2 15740 10829 16313 nA2 1 1.5 1.0 '2P2 1 1.1 0.82 nc2 0 0.14 -0.001 den Interessierten bleibt noch einiges auszuprobieren: MeBwerte fur U erzeugen und auswerten, die B- und P-Werte ilber rationale Funktionen differentiell auswerten, mit den verschiedenen Parametersatzen nichtlineare Regressionen starten, sowohl mit den differentiellen Meflwerten als auch mit den integralen (also unmittelbar mit den Konzentrationswerten), oder die MeBfehler oder die Fehlerstruktur variieren. Solche Unternehmungen konnen sich an den bisherigen Beispielen orientieren.
7.3.11 Parameterschatzung in einer einfachen DGl mit der Himmelblau-Jones-Bischoff-Methode(*)
3
Als DG1 dient = 2par. Mit dem Wert par = 1 erzeugen wir uns verrauschte MeBwerte und ermitteln dann den Parameter nach der HJB-Methode. Dieses Problem kann als Voriibung zum Problem 7.3.12 dienen; der Losungsvorschlag ist ganz auf dieses Problem 7.3.12 ausgerichtet. Losungsvorschlag global tmue ymue mueq p4 tc 10
%MeBstellen: tmue=O:O.l:1; %Verrauschte MeBwerte: for i = 1:11 ymue(i)=tmue(i) 2+0.05*randn; end %Ausgleichende Parabel: p2=poIyfit(tmue,ymue,2); Textvariable fiir die DG1: I0='2*par'; %Stutzstellen fiir die numerische Integration der MeBwerte: A
tc=[];
354
7 Planen und Auswerten reaktionskinetischer Experimente
for i = 1 : l O ti=[tmue(i):O.O1:tmue(i+l)); t c= [tc ;ti] ; end
Unterprogramm fiir die Regression: PARABEL-LSQ2
function f = parabel-Isq2(par) global tmue ymue tc 10 %IO='2*par' 11(l)=O;y( 1)=0;
%erste Integration*********** for i = 2:size(tc,2) Il(i)=ll(i-l)+trapz(tc(i-l,:),eval(lO)*ones(
l,size(tc,2)));
end
yo************************ ps=polyfit(tmue( l:size(tc,2)), I1,2);
%zweite Integration********** for i = 2:size(tc,2) y(i)=y(i-l)+trapz(tc(i-l,:),polyval(ps,tc(i-l,:)))~ end
yo************************ f=y-ymue;
Regression mit Startwert 2: pa=leastsq('parabel_lsq2',2) pa =
0.9967 Der Parameter ist praktisch gleich dem vorgegebenen, die Anpassung entsprechend gut.
7.3.12
Parameterschatzung in der Bulirsch-DG1 mit der Himmelblau-Jones-Bischoff-Methode (*)
Wenden wir die HJB-Methode (s. G1. (7.17)) auf die Bulirsch-DG1 (7.33) in Problem 7.3.7 an. Wir mussen uns dafiir wieder ,,Meflwerte" ymue an den Meastellen tmue beschaffen, die wir durch ein Polynom vierten Grades anpassen, so wie wir es im zitierten Problem gemacht haben.
7.3 Probleme und Ldsungen
355
Losungsvorschlag Im folgenden bezeichnen mue den Parameter p , p4 das angepaate Polynom, tc die Stiitzstellen f t h die numerische Integration, und die Textvariable I0 enthalt die rechte Seite der Bulirsch-DG1. global tmue ymue mueq p4 tc 10 mue=60; mueq=mue^ 2; tmue=O: .l:1; for i = 1:11 ymue(i)=sin( pi*tmue(i))+O.O5*randn; end p4=polyfit(tmue,ymue,4);
tc=n; for i = 1:lO ti =[t m ue( i ) :0.01:t m ue( i +I)]; tc=[tc;ti]; end IO='mueq*polyval( p4,tc(i-I,:))-(mueq+pare2)*sin( par*tc(i-1
,:))I;
Das File BBLSQ2 integriert die DGl(7.33) zweimal numerisch und benutzt die so ,,berechneten " Werte der Modellfunktion fiir die Zielfunktion der Regression: BBLSQ2
function f = bblsq2(par) global tmue ymue mueq p4 tc 10 %IO='mueq*poIyvaI(p4,tc(i-I,:))-(mueq+parA2)*sin(
par*tc(i-I,:))';
%erste Integration***************** ll(l)=O;y( 1)=0; for i = 2:size(tc,2) Il(i)=ll(i-l)+trapz(tc(i-l,:),eval( lo)); end
yo********************************
%Anpassung der integrierten Werte durch Polynom 4. Grades ps=poIyfit(tmue( l:size(tc,2)),II,4); yozweiteIntegration****************************** for i = 2:size(tc,2) y(i)=y(i-l)+pi*(tmue(i)-tmue(i-l))+trapz(tc(i-l,:),polyval(ps,tc(i-l,:)));
end
yo*********************************************
f=y-ymue;
Wenn wir allen benbtigten Variablen Werte zugewiesen haben, kbnnen wir die Regression starten; als Schtitzwert filr den Modellparameter wtihlen wir 1:
356 7 Planen und Auswerten reaktionskinetischer Experimente pa=leastsq('bblsq2',1) %fmins bei SE pa = 3.3731
Das ist eine brauchbare Nsherung ftir den wahren Wert T . Die Anpassung ist dabei nicht einmal gut; auch bei der numerischen Integration erweist sich die Bulirsch-Funktion als problematisch. Trotzdem erhalt man einen vernthftigen Startwert fiir den Modellparameter.
7.3.13 Priizisierung der Geschwindigkeitskonstanten in einer Langmuir-Hinshelwood-Gleichung (**, nicht SE) Geschwindigkeitskonstanten einer Langmuir-Hinshelwood-Gleichungsollen mit moglichst wenig Versuchen moglichst genau ermittelt werden. Alles weitere erfahren Sie, wenn Sie im DOS-Fenster das File B O L U ~ . E X Ea u s f ~ e n .
Losungsvorschlag Wir wahlen einige sinnvoll erscheinende Konzentrationspaare und erhalten das folgende Ergebnis: load bolul.aus%Dieses File wird bei jedem Lauf von
B O L U ~ . E X Euberschie-
ben! % bolul
bolul =
0.5086 0.0383 0.1325 0.0024
0.9000 0.1000 0.1000 0.9000 0.5000 0.5000 0.0500 0.0500
Wir versuchen, aus diesen Ergebnissen die drei Geschwindigkeitskonstanten zu schatzen: global c r
r=bolul(:,l);c=bolul(:,2:3); rl=r;cl=c; k=leastsq(' bolulls',[ 1;l;11)
Dieser Versuch schlug in der MATLAB-Version 4.x noch fehl: Es ergaben sich negative Werte filr Icz und k3 und man muilte auf constr zuriickgreifen, um uber Nebenbedingungen die Parameter auf positive Werte zu zwingen. Mit der Version 5 erhtilt man:
7.3 Probleme und Lasungen
357
k= 1.0437 0.4377 5.7752 Wir bilden nun die Jacobi-Matrix drdk als eval-fiihigen String, wahlen die ersten drei Konzentrationspaare als Schiitzwerte und starten die Maximierung nach der Box-Lucas-Methode (drdk und k miissen global sein): drdk ='c( 1)/( l+k(2)*c( l)+k(3)*c(2))'; drdk=[drdk,',-k( l)*c( 1) 2/(l+k(2)*c(l)+k(3)*~(2))
2'1; drdk=[drdk,',-k( l)*c( 1)/( l+k(2)*c(l)+k(3)*~(2)) 2*~(2)']; drdk= [' [' ,drdk,'1 '1 ; CO =[0.5000 0.5000;... 0.9000 0.1000;... 0.1000 0.90001 3,2)],[0.9*ones(3,2)]) cp=constr(' bolulfun',c0,[],[0.0l*ones( ( B O L U ~ F U Ndilrfte genau wie B O L U ~ L Sselbsterkliirend sein; auf einen kommentierten Ausdruck wird daher verzichtet.) A
A
A
Etwas uberraschend werden die Startwerte als optimale Werte herausgegeben: cp = 0.5000 0.5000 0.9000 0.1000 0.1000 0.9000
Die Abbruchkriterien werden verschiirft und Zwischenausdrucke verlangt (die im folgenden weggelassen sind) :
options( 1)=1; options(2)=le-10; opt ions(2) =1e- 1O;options(3) =le- 10; [cp,options]=constr('bolulfun',cO,options,[O.Ol*one~(3,2)], [0.9*ones(3,2)]) cp = 0.3794 0.0100 0.9000 0.0100 0.8114 0.1886
(Ihre Ergebnisse kbnnen etwas verschieden sein, weil ja Zufallsfehler zu den Reaktionsgeschwindigkeiten hinzugefilgt werden.) Mit diesen Wertepaaren starten wir drei neue Versuche; die Ergebnisse stehen wieder im File bolul.aus:
358 7 Planen und Auswerten reaktionskinetischer Experimente load bolul.aus bolul
bolul = 0.3531 0.3794 0.0100 0.6203 0.9000 0.0100 0.3446 0.8114 0.1886
r2=bolul(:,l);c2=bolul(:,2:3); Eine Regressionsrechnung mit allen sieben Versuchen ergibt: c =[c1;c2] ; r=[rl;r2]; k=leastsq(’bolulls’,k)
k = 1.2025 0.7234 5.9151
Auftragen berechneter gegen gemessener Reaktionsgeschwindigkeiten zeigt (Abb. 7.19), daB die Anpassung schon sehr gut ist: for i = 1:7 Rc(i)=k( 1)*c(i,l)/(l+k(2)*c(i,l)-tk(3)*c(i,2)); end plot( [0 0.71,[O 0.71 ,Rc,r,’o’)
0.6-
0.50.4 -
0.3 -
Abbildung 7.19: Gemessene ( r m )gegen berechnete (rC) Reaktionsgeschwindigkeiten.
7.3 Problerne und Losungen
359
Dieses Verfahren kunnen wir nun fortsetzen, bis uns das Ergebnis zufriedenstellt , entweder weil sich die Parameter nicht mehr signifikant Bndern, oder weil die Konfidenzintervalle gut genug sind, oder was wir als Kriterium verwenden wollen. Die Frage ist, ob wir den Aufwand noch reduzieren kunnen, vor allem den experimentellen, aber auch den rechnerischen. Wir kbnnten z. B. nur einen neuen Versuch jeweils planen, m a t e n dann also die Determinante d e t ( J T J ) maximieren. Wenn wir den Fortschritt unserer Parameterpriizisierung sowieso anhand der Kovarianzmatrix ilberwachen, kbnnen wir sie bei den Optimierrechnungen jeweils als A-priori-Information benutzen und nur die Werte des neuen Versuchs einsetzen; iiber diese Bayessche Methode kUnnen Sie sich in der Literatur informieren - die MATLAB-Hilfsmittel sind schon vorgestellt.
7.3.14 Modellaufbau (**) Ein Produkt P kann aus A und B mit Hilfe eines homogenen Katalysators C in einer Fliissigphasereaktion hergestellt werden. Aus den priiparativen Arbeiten wurde geschlossen, dai3 es sich um eine Folgereaktion handelt:
A+B A+P
--+ ---t
P U
(7.39) (7.40)
Erste kinetische Untersuchungen in einem Labor-Batchreaktor variieren die Anfangskonzentrationen von A und B, die Katalysatorkonzentration (C) und die Temperatur (D) nach einem vollstiindigen Faktorplan, der im folgenden wiedergegeben ist. Faktor A
-1 1 -1 1 -1 1 -1
1 -1
I -1 1 -1
B -1 -1
I I -1 -1 1 1 -1 -1
I 1 -1
C -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1
D -1 -1 -1 -1 -1 -1 -1 -1
I I 1 1 1
360
7 Planen und Auswerten reaktionskinetischer Experimente
1 -1 -1 1 1 1 Niveau-Werte A (mol/l> + 40 - 20
1 1 1
1 1 1
B (mol/l>
C (mol/l>
+
2
+
1.0
-
1
-
0.5
D (mol/l> + 175 - 165
Meflwerte wurden bei t = 80, 160, 320, 640 und 1280 Minuten erhoben; die Zeiten und die zugehorigen Konzentrationswerte von P (in lo2 mol/l) sind im File CBMODAUF.MAT in T und in der (16,5)-Matrix F enthalten; das File enthalt auflerdem in FAK den 24-Faktorplan, also die oben gezeigten Einstellungen der Faktoren. a) Zur Ubung seien Effekte und Wechselwirkungen bezilglich der P-Werte berechnet. b) Der Modellaufbau nach Box und Hunter (351 verlauft wie folgt: Wir beginnen mit einfachsten kinetischen Gleichungen fiir die beiden Reaktionen; wegen des groflen A-Uberschusses bieten sich Geschwindigkeitsgleichungen pseudo-erster Ordnung an:
(7.41)
k2CP
(7.42)
Die Konstanten k l und k2 werden filr jeden Versuch durch nichtlineare Regression ermittelt. Wir untersuchen den Einflufl der Faktoren auf die beiden Geschwindigkeitskonstanten, zweckmtiflig auf ihre logarithmierten Werte, denn dann erhalten wir far den Fall, dafl Potenzgesetze der Form
(7.43) zutreffen und die individuellen Ordnungen bezaglich P mit Null und eins sowie bezilglich B mit eins und Null richtig gewahlt wurden, ln(kj) = n A j ln(c;)
Ej 1 + nbj ln(c;) + ncj ln(cc) + ln(koj) - -RT
(7.44)
und daher quantitative Angaben iiber die Modellparameter n A j usw. (Die nL3 sollten bei Null liegen, wenn die Ordnungen bzgl. B zutreffen.)
7.3 Probleme und Lusungen 361
Losungsvorschlag a) Wir laden wie angegeben CBMODAUF.MAT mit T , F und FAK: load cbrnodauf %F in lo2 mol/l
Fiir die Auswertung des Faktorplans schreiben wir ein Programm, z. B.
CB-
M ODAU F : CBMODAUF
%fak, t, F; fa ks=fa k' ; A=faks( 1,:)*F/8; B=faks(2,:)*F/8; C=fa ks(3, :)*F/8; D=faks(4, :)*F/8; AB=fa ks( 1,:).*fa ks(2, :)* F/8; AC=faks(l,:).*faks(3,:)*F/8; AD=faks( l,:).*faks(4,:)*F/8; BC=fa ks(2,:).*fa ks(3, :)*F/8; BD=faks(2,:).*faks(4,:)*F/8; CD=faks(3,:).*faks(4,:)*F/8; ABC=faks(l,:).*faks(2,:).*faks(3,:)*F/8; ABD=faks( l,:).*faks(2,:).*faks(4,:)*F/8; ACD=faks( l,:).*faks(3,:).*faks(4,:)*F/8; BCD=faks(2,:).*faks(3,:).*faks(4,:)*F/8; ABCD=faks(l,:).*faks(2,:).*faks(3,:).*faks(4,:)*F/8; Effs=[A; B;C;D;AB;AC;AD;BC;BD;ABC;ABD;ACD;BCD;ABCD]; EffslSp=['A ';'B ';'C ... 'D ';'AB ';'AC ';'AD ';'BC ';'BD ';... 'ABC ';'ABD ';'ACD ';'BCD ';'ABCD']; I;
Mit den beiden Variablen Effs und EffslSp konnen wir folgende Ausgabe arrangieren: [EffslSp,num2str( Effs)]
A B C D AB AC AD BC BD ABC
22.8988 13.0988 5.46375 14.4037 6.60125 1.58625 6.29625 2.73625 6.09625 -0.03625
32.7587 22.0088 6.96125 19.7413 8.64125 2.73875 5.55875 2.38875 8.60875 0.31125
29.93 27.105 8.755 16.38 8.12 0.17 -2.155 1.295 8.22 0.73
7.5125 27.3625 2.3625 3.3375 2.1625 -3.4875 -17.0625 1.5625 -0.0125 -0.7375
-17.545 18.395 0.13 -10.345 -7.03 -3.045 -13.32 1.095 -2.83 -2.38
362 7 Planen und Auswerten reaktionskinetischer Experimente ABD 2.85375 ACD -0.05125 BCD 0.79875 ABCD-0.34875
2.69125 -1.35625 -0.50625 -0.54375
0.505 -2.545 -0.02 -3.155
-5.9625 -4.3125 -2.0625 -3.8125
-5.105 -0.17 0.22 0.495
Die Effekte zeigen, dai3 wir es - wie nicht anders zu erwarten - mit komplexen Zusammenhangen zu tun haben, die sich in zum Teil starken Wechselwirkungen haherer Ordnung widerspiegeln. Diese Wechselwirkungen sind kaum zu interpretieren. Wir starten die Modellierung besser mit einfachen kinetischen Gleichungen, ermitteln deren Parameter und untersuchen dann, ob diese Parameter auch wirklich konstant sind, so wie es die Aufgabe b) skizziert. b) ZunBchst die Regressionsrechnungen: Wir schreiben zwei Programme, CBAUFLSK, das die Ermittlung der Pseudw Geschwindigkeitskonstantenkl und k2 steuert, und CBAUFLS, das U P fur leastsq. CBAUFLSK
kO=[ le-04,2e-04]; k=[]; options(2)=le-6;options( 3)=le-6; for iz = 1:16
kls=leastsq(’cbaufls’,kO,options);%fmins bei SE
’?4kls=constr( ’cbaufls-constr’, kO,options,[O,O]); k=[k;kl~]; end CBAUFLS
function f=cbaufls( par) global BO F iz t CP options kl=par( 1);k2=par(2); cBO=BO(iz); f=F(iz,:)-eval(cP);
f=f*f’;%bei SE Dann bereiten wir den Aufruf von
CBAUFLSK
vor:
global BO F iz t CP options load cbmodauf BO=[ones(l6,1)*[1 1 2 2]]’;BO=BO(:); F=F*le-02; %Umrechnung auf mol/l
cP=dsolve(’DcP=kl*cBO*exp(-kl*t)-k2*cP‘,’cP(O)=O’);%symbolische Losung der Geschwindigkeitsgleichungen pseudwerster Ordnung% cbauflsk Das Ergebnis des Aufrufs sind die Geschwindigkeitskonstanten der 16 Versuche in der Matrix k.
7.3 Probleme und Losungen
363
Plots von c p gegen t geben Aufschlui3 fiber die Gilte der Anpassung, z. B.: tm=t;t=O: 10:1300; k l = k ( l,l);k2=k( 1,2);cBO=l; plot(t,eval(cP),tm,F(l,:),'o')
0.251
-0.05;
500
tin min
1000
1 00
hbbildung 7.20: Mei3werte und Regressionskurve fiir den ersten Versuch des Faktorplans. Solche Plots wie Abb. 7.20 sollten Sie sich filr alle 16 Versuchslaufe ansehen, um die Parameteroptimierung zu kontrollieren! Gegebenenfalls miissen einzelne Regressionsrechnungen mit vergnderten Optionen oder Anfangswerten wiederholt werden. Besonders leastsq ist empfindlich; gegebenenfalls k6nnte auf constr umgestiegen werden (mit einem anderen UP!). Wir berechnen nun die Effekte der Faktoren auf ln(k) sowie alle Wechselwirkungen, wiederum mit Hilfe des Programms, das wir bereits filr die Effekte auf die Konzentration von P verwendet haben: F=[]; F=log(k); faks=fak'; cbmodauf;
Effekte auf ln(k): A
B C
1.4422 -0.0013158 0.32668
0.68109 0.034236 0.079818
364
7 Planen und Auswerten reaktionskinetischer Experimente
D AB AC AD BC BD ABC ABD ACD BCD ABCD
0.90067 -0.059946 -0.017952 -0.072183 -0.035979 0.061299 0.057262 0.057623 0.00335 0.015329 -0.066781
0.46921 -0.020718 -0.057915 -0.028301 -0.096424 -0.022729 0.11576 0.043759 0.0525 0.077171 -0.046213
Varianzen unter der Annahme, keine Wechselwirkung sei signifikant : Effsllq=Effs(S: 14,:). 2; A
s=sqrt( su m (Effsl l q ) / 11); % Standardabweichungen
y=tinv(0.975,11); % kritischer Wert der t-Verteilung fur 11 F’reiheitsgrade auf 95 % - Niveau, der auch aus Tabellen entnommen werden kann (tinv ist ein Programm der Statistics Toolbox)
Y = 2.2010e+000 ts=y*s ts =
1.0594e-001 1.3365e-001
Diese Werte werden von keiner Wechselwirkung iiberschritten, die also wie angenommen nicht signifikant sind. Auch der EinfluB der B-Niveaus ist nicht signifikant, die individuelle Reaktionsordnung von 1 bzgl. B also akzeptiert. Um aus den Effekten die Parameter n A j usw. zu erhalten, mussen wir die Effekte g e m u G1. (7.20) transformieren: Es=EfFs(l:4,:); % die Effekte A bis D Es=Es’; vp=[40 2 1 175+273.16];vm=[20 10.5 165+273.16]; vpf=log(vp);vmf=log(vm);
vpf(4)=~/vp(4);vmf(4)=l/vm(4);
expo= Es./ ([vpf-vmfypf-vrnf]) expo = 2.0807e+000 -1.8983e-003 4.7130e-001 -1.7686e+004 9.8261e-001 4.9391e-002 1.1515e-001 -9.2137e+003 Mean=sum( F)/16; InkO=Mean’-Es/2*[(vpf+vmf) ./(vpf-vmf)]’
7.3 Probleme und Losungen 365 hkO = 2.6630e+001 1.1193e+001 EA=-1.987*expo(: ,4) EA = 3.5142e+004 1.8308e+004 kO=exp( InkO)
kO = 3.6744e+011 7.2654e+004 Es kann also angenommen werden: T L A ~= 2, 7 2 ~ 2= 1, ncl = 0,5, 7 2 ~ 2= 0 (nach dem &Test in der Effekte-Tabelle), die Ordnungen bzgl. B beide eins. Mit den jetzt vorliegenden Parameter-Schkitzwerten konnte man mit einiger Aussicht auf Erfolg eine nichtlineare Regression starten.
7.3.15
Diskriminierung zwischen zwei Geschwindigkeitsgleichungen (**)
Hougen und Watson [36] haben 18 verschiedene Geschwindigkeitsgleichungen vorgeschlagen fur die katalytische Hydrierung von iso-Okten- zu isc+OktanGemischen. Spiiter haben Blakemore und Hoerl [37] versucht, alle diese Modelle und noch zwei weitere an die damals in der Literatur verfugbaren MeDdaten anzupassen. Sie fanden, d d alle Modellgleichungen nicht adkiquat waren bis auf zwei, zwischen denen nicht zu entscheiden war; diese beiden Gleichungen sind
Neue ,,ExperimenteLL zur Entscheidung zwischen diesen beiden Geschwindigkeitsgleichungen kbnnen mit dem Programm MODDISCR. EXE durchgefiihrt werden. Als Vorversuche wird ein 23-Faktorplan durchgeftihrt; die ,,Mefiergebnisse" fur die Reaktionsgeschwindigkeiten und die Einstellungen der Konzentrationen sind im File R C ~ . M A T gespeichert. (Alle Gr6Den hier und im folgenden in konsistenten Einheiten.)
366 7 Planen und Auswerten reaktionskinetischer Experirnente Losungsvorschlag global rc load rc8%enth?ilt RC mit den Ergebnissen des 23-Faktorplans pl=leastsq( 'modilsl' ,[0.05;1;1;l])%Parameterschatzung fiir RC mit dem U P M O D I L S ~%
%pl=fmins('modilsl -se',[0.05;1;1;1])fur SE% %Wie stets bei Optimierungen sollte mit einem anderen Anfangsvektor erneut gestartet werden; auch Abbruchkriterien (Optionen) ktinnen probeweise verandert werden! Auf jeden Fall m d die Fehlerquadratsumme akzeptabel sein.% pl = 6.3890e-002 1.3290e-001 1.6126e-001 1.4009e-002 plm=pl; fl=modilsl( p l ) ; Sl=fl'*fl
s1
=
2.6767e-O09%Summe der Abweichungsquadrate p2=leastsq( 'modils2', [0.05;1;1;11) p2 = 6.5007e-002 1.3431e-001 2.9604e-001 2.7665e-002 pm2=p2; f2=modiIs2( p2); S2=f2'*f2 s2 = 1.3074e-008 m=a;
LlL2=(S2/Sl)^ (m/2)% ikelihool Verhhltnis L1L2 = 5.6920e+002 Konf2=l/( 1 S L l L 2 ) Konf2 = 1.7538e-O03%Es sieht schlecht aus fiir das Model1 2! Konf2v=Konf2; Die optimalen c-Werte fiir die nachsten Versuche werden mit einer Gittersuche bestimmt, die vom File J12Y durchgefilhrt wird. Es wird nur der Absolutwert der Differenz zwischen den vorhergesagten Werten von ~ ( lund ) T(*) maximiert; das geniigt, sofern ihre Varianzen ungefghr gleich groB sind.
7.3 Probleme und L6sungen
1
/
u-
367
-
cu -
5 0.8U
r"
:$0.6) .
N
c
+
0.4-
c
2 0.20
Abbildung 7.21: Konfidenz ftir Model1 2 im Verlauf der Diskriminierung.
0.2
0.35/l------
I 0.3
-
-
U
$0.25-
7-
a, 0.15 0
. . .
a,
2 0.2-
E
E 0.15-
r L
'j 0.1
._
c
2
2
2
(II
0.0:
1
I-
O*l-'--I
--
.I--
_ - - -_ - -
1
< -
\ - -
C
. "
I
I
Versuchs-Nr.
50
. _.-_ _ _ _ _ , Ve rsuchs-Nr.
0
Abbildung 7.22: Geschwindigkeitskonstanten im Verlauf der Modelldiskriminierung. (Die Standard-Reihenfolge der Linientypen ist -, - - -, . . -,--)
368 7 PJanen und Auswerten reaktionskinetischer Experimente cop=j 12y( PI,p2) cop = 1.4000e+000 3.0000e+000 5.0000e-002
Mit diesen Werten wird nun ein Versuch durchgefiihrt - im DOS-Fenster mit dem Exe-File MODDISCR. Den weiteren Verlauf ilbertrtigt man am besten einem Programm, z. B. MODIABL
load moddiscr.aus%enthtilt den neuen Meilsatz rc=[rc; moddiscr]; save rc rc %Die ntichsten Zeilen wiederholen die oben vorgestellten Schritte pl=leastsq('modilsl',pl); PIm=[ p l m ,p l ) f l=modilsl ( p 1); l = f 1'*f 1; p2=leastsq(' modils2',p2); p2m=[p2mPp2] f2=modiIs2( p2); S2=f2'*f2; [m, n]=size( rc) LlL2=(S2/Sl)^ (m/2); Konf2= 1/ ( 1+L 1L2)%Konfidenz Konf2v=[Konf2v,Konf2J pause co~=Jl2y(pl,p2)
s
Mit jedem neuen optimalen Satz cop wird ein Versuch durchgefilhrt und erneut MODIABL aufgerufen. Nach etwa 10 Versuchen (zustitzlich zum Faktorplan) hat sich die Konfidenzzahl fiir die Geschwindigkeitsgleichung2 in der Nahe von eins eingependelt (Abb. 7.21). Der Verlauf ist nicht unbedingt typisch, er htingt mehr oder weniger vom Zufall ab. Es kann zu starken Schwankungen der Kodidenzzahl kommen, und es kbnnen viele Versuche erforderlich sein, bis sich die Waage einem der beiden Modelle zuneigt; auch Parameter erreichen oft erst spat einigermailen konstante Werte (Abb. 7.22). Uberzeugen Sie sich davon - am Rechner sind einige Versuchsreihen schnell durchgefilhrt! Der Grund, eine simple Gittersuche anzuwenden, liegt in der Erfahrung, daf3 die Zielfunktion der Modelldiskriminierung htiufig so viele Maxima aufweist, wie Parameter vorhanden sind. Bei wenigen Parametern kann man durch eine Gittersuche dann leichter das globale Optimum finden als mit herkbmmlichen O p timierverfahren. Die Antwortfltiche in unserem Fall ist beispielhaft in Abb. 7.23 dargestellt, die mit dem File MODIPLO fur den letzten Parametersatz erzeugt wurde ( p l = p l m ( : ,23);p2=p2m(:,23);).
7.3 Probleme und Lasungen
c2
0--0 C1
Abbildung 7.23: Zielfunktion der Modelldiskriminierung bei
7.3.16
369
cg
= 2.5.
Differentielle Auswertung von axialen Konzentrations- und Temperaturmessungen in einem NH3-Versuchsreaktor (***, nicht SE)
Diese Aufgabe basiert auf Untersuchungen, die eine Arbeitsgruppe der BASF 1381 in den sechziger Jahren durchfuhrte. Dort wurde versucht, die Kinetik der Ammoniaksynthese in einem adiabatischen Versuchsreaktor zu studieren; aus axialen Temperaturprofilen sollten Reaktionsgeschwindigkeiten ermittelt und ausgewertet werden. Da es nicht gelang, den Versuchsrektor hinreichend adiabatisch zu isolieren, wurden zusiitzlich zu den Temperaturen an mehreren axialen Stellen uber Sonden Gasproben gezogen und analysiert. Zur Auswertung wurden durch diese Konzentrations-Mei3punkte abschnittsweise Polynome gelegt, deren Differentiation Reaktionsgeschwindigkeiten lieferte; zusammen mit den zugeharigen Konzentrationen und Temperaturen hatte man so die filr eine kinetische Modellierung erforderlichen Daten gewonnen. Der Hauptteil der Aufgabe besteht darin, solche Datensiitze auszuwerten, die hier aus Simulationsrechnungen stammen. In einem zweiten Teil sol1 der Frage nachgegangen werden, ob die in der Vorlage und die hier in modifizierter Form durchgefiihrte Auswertung iiberhaupt sinnvoll ist, eine F’rage, die man sich im Ernstfall naturlich vor jeder anderen Aktivitiit stellen sollte. Verstgndlich, aber dennoch bedauerlich, enthalt die Vorlage nur sparliche Angaben iiber Mei3apparatur und -bedingungen, gar keine z. B. iiber die Abmessungen des Versuchsrohrs oder Uber den Katalysator. Alle folgenden Daten sind daher nur Spielmaterial, das sich wenn mbglich an typischen, aus der Literatur bekannten Werten orientiert:
370
7 Planen und Auswerten reaktionskinetischer Experimente
Korndurchmesser (Durchmesser der volumengleichen Kugel) mittlerer Porenradius Porositat des Korns (Katalysator im reduzierten Zustand) Labyrinthfaktor Rohrdurchmesser Lange der Schilttschicht Druck (Druckabfall wird vernachltissigt) Temperatur am Eingang Eingangszusammenset zung Querschnit tsbelastung
6.10-3 m 3.10-8 m
0.5 2 0.1 m l m 3.105 Pa 350, 400 und 450 "C 22 % N2, 66 % HI, 2 % NH3, 5 % Ar, 5 % CH4 2 kg/m2/s
Die Mei3werte an acht axialen Stellen sind fur die drei Eingangstemperaturen in den Files NH3zxT623, iV~3zxT673und rvH3zxT723 enthalten; t in der ersten Spalte gibt den Abstand vom Anfang der Schiittung in Metern an, die folgenden fiinf Spalten zeigen die Molanteile der Komponenten in der Reihenfolge der Eingangszusammensetzung, und die letzte Spalte enthiilt die Temperaturen in Kelvin. (Die Anzahl der Stellen sagt nichts iiber die Genauigkeit der Messungen aus, sie ist durch den Computerausdruck bestimmt.) Die in der Simulation berechneten Werte wurden nicht durch Uberlagerung von Zufallsfehlern verrauscht; das erkennt man unmittelbar an den gleichen Werten der beiden Inertgase. Die Molanteile der Reaktionskomponenten stehen also in st6chiometrischen Beziehungen, wie eine entsprechende Rechnung zeigen wiirde. Wenn man von unterschiedlichen Fehlern bei der numerischen Differentiation absieht , ist es daher gleichgiiltig, welcher der Reaktionskomponenten zur Auswertung herangezogen wird. Diese Ausgangslage ist natilrlich nicht realistisch: Ublicherweise wilrde man gemessene Molanteile ausgleichen, so dal3 ihre Summe eins ergibt, und mittlere Reaktionsgeschwindigkeiten aus den x-z-Verliiufen der drei Reaktionspartner ableiten (wobei die Frage geeigneter Gewichtungen ein betrachtliches Problem sein kann). Da eine solche Vorbehandlung der Me& werte im Realfall zwar sehr wichtig sein kann, rechentechnisch aber hier nichts Neues bringen wtirde, wurde das Problem durch Angabe der unveranderten fehlerfreien Simulationswerte auf die zentralen Auswertungsschritte reduziert. Noch eine Vorbemerkung: Die ,,Mei3werte " sollten als Ergebnis eines Rumpfprogramms angesehen werden. Es wtire bei realen Messungen sinnvoll, auch die Eingangszusammensetzung und den Durchsatz zu variieren. Der Datensatz sollte aber ausreichen, die Parameter einer vorgegebenen Geschwindigkeitsgleichung zu ermitteln. Wenn auch die Form der Geschwindigkeitsgleichung gesucht werden milflte, wtkde bei solchen nichtisothermen integralen Messungen selbst ein umfangreicheres Versuchsprogramm keineswegs den Erfolg garantieren; der Rechenaufwand ware enorm. Bei der Ammoniaksynthese darf man nach ausfiihrlichem Literaturstudium davon ausgehen, daf3 die Temkin-Pyshev-Gleichung geeignet sein sollte:
7.3 Probleme und Ltlsungen
371
(7.47) Immer noch schwierig genug sein d b f t e die Auswertung aufgrund von Einfliissen des Stofftransports im Katalysator, die nach der Literaturlage zu vermuten sind; da die Querschnittsbelastung kleiner als im technischen Reaktor ist, kann auch ein auflerer Transportwiderstand am Katalysator nicht ausgeschlossen werden. Die Auswertung wird also folgenden Ablauf haben: 0
0
0
Numerische Differentiation der Konzentrationswerte, um Reaktionsgeschwindigkeiten zu erhalten Tests auf a d e r e und innere Transportwiderstande Regressionsrechnungen zur Ermit tlung der Parameter der Temkin-PyshevGleichung unter Beriicksichtigung eventueller Transportwidersttinde.
Fiir diese Aufgaben muS man sich eine Reihe von Daten besorgen, was ein betrtichtlicher Aufwand ist, zumal das reale Verhalten der Gase beriicksichtigt werden mufl. Dieser Teil der Arbeit sei dem Leser abgenommen; einige der erforderlichen Daten konnten der Literatur entnommen werden, die meisten wurden nach iiblichen Naherungsverfahren mit Hilfe fertiger MATLAB-Programme berechnet. Stoffgrbflen wie c+, X und andere, deren Abhtingigkeit von Temperatur und Zusammensetzung im interessierenden Bereich nur gering ist oder die nur fur Uberschlagsrechnungen benbtigt werden, wurden fiir 300 bar, 700 K und die Eingangszusammensetzung berechnet und kbnnen angesichts anderer Unsicherheiten als konstant angesehen werden. Das Gasgemisch wurde als ideale Mischung realer Gase angesehen; diese vereinfachende Annahme macht Iterationen iiberflfissig und erleichtert die Berechnungen ganz erheblich, ohne ilbermidige Ungenauigkeiten einzuschleppen. Folgende Werte oder Beziehungen kbnnen verwendet werden, die in der MATLAB-Schreibweise iibernommen wurden: %Fugazittitskoeffizienten f b die Reaktionspartner: gammaN2=0.93431737+0.3101804~03*T+0.295896~03*p ... -0.2707279e-06*T^2+0.4775207e-O6*p^2; gammaH2=exp(exp(-3.8402*T^O.125+0.541) *p.. . -exp(-0.1263*TA0.5- 15.980)*pA2+300*exp(-0.0119Ol*T-5.941)*... (eXP(-P/300)-1)); gammaNH3=O. 1438996+0.2028538e-02*T-O.4487672e-O3*p.. . -0.1142945e-05*T^2+0.2761216e-O6*p^2; %Gleichgewichtskonstante:
log(Ka)=2*(-2.691122*log(T)-5.519265e-O5*T ... +1.848863e-07*TA2+2001.6/T+2.6899);
%Bintire Diffusionskoeffizienten Dij (i < j ) bei 1 bar und 298 K in m2/s: DO=7.08e-5*[0 1 0.302 0.239 0.267;O 0 1.04 .986 .883;0 0 0 0.246 0.222;...
372
7 Planen und Auswerten reaktionskinetischer Experimente
0 0 0 0 0.285];%D(T,p)=DO/p*(T/298)-1.75;(pin bar) %Viskosit&t: eta=3.0e-O5;%kg/m/s %Wgrmeleitf&higkeit : lambda=O. 125;%W/m/K D i e i m folgenden a n g e g e b e n e n global-Anweisungen sollten alle z u B e g i n n stehen, da i n den zukunftigen Versionen M A T L A B leider verl a n g t , eine Variable als global z u erklaren, bevor man sie b e n u t z t . Im folgenden sind einige Ergebnisse mit der SE erzielt worden; sie k6nnen sich von denen der Vollversion aufgrund der verschiedenen Optimierroutinen unterscheiden. Fur die numerische Differentiation der gemessenen Molanteile einer ausgewahlten Schlilsselkomponente schreibt man ein kleines Programm; es kann z. B. auch die Gilte der Anpassung grafisch zeigen sowie gleich die Reaktionsgeschwindigkeiten berechnen, wie es im folgenden Vorschlag zu sehen ist: SH3DIFF-AUS
%Differentiation von Meflwerten nach Anpassung rationaler Funktionen %zm und cm muessen in der workspace als globale Variable %vorhanden sein; ns, der stoechiometrische Koeffizient der %Schluesselkomponente sowie nue, die Summe der stoechio%metrischen Koeffizienten miissen besetzt sein. %Zaehler- und Nenner-Polynome der gewuenschten rationalen % Funktion koennen in diesem File deklariert werden global rf cm zm %nump= ' [par ( l)]' ;denp= ' [par (2),par(3),par(4)] ' ; nump='[ par( I),par(2), par(3)]';%numerator polynom denp='[par(4), par(5),par( 6), par(7)I'; denumerator polynom% rf=['polyval(',nump,',zm)./','polyval(',denp,',zm)']; %par= [.22,.05,.25,1];
par=[22,0.022,0.22,100,90,2,1]; parO=par; %Anfangsschhtzwerte par=leastsq( 'cbculrf' ,pad); plot(zm,eval(rf),zm,cm,'o') [Q,De] =eval polyderf nurnp. ' 'denp,') '1) ;% Differentiation dxlm=polyval(Q,zm')./polyval( De,zm'); % d x N 2 / d z reff=dxlm./(ones(size(zm,2),1)*ns-nue*cm'); %=reffKorn*L/uc*0.6 ([I
I ,
~
CBCULRF-NH3
function f = cbculrf(par) global rf cm zm %rf ist eine Stringvariable, die die rationale %Funktion enthaelt. cm enthaelt die Messwerte, %zm die Messstellen. f=cm-eval (rf ) ;
7.3 Probleme und Ltrsungen 373
Vor dem Aufruf von NH3DIFF-AUS muB man natilrlich die bentitigten Werte zur Verfiigung stellen, wie es in den Kommentarzeilen des Fileausdrucks beschrieben ist. Man liidt NHQFBRDAT zur Eingabe der gewbschten Temperatur, das dann alle Daten und Voreinstellungen bereitstellt. NHSFBRDAT
global Az Bz Luc hLurcp BiGah Nr Gam Gah NSlv nue Nr global xs T uOc0 NS x0 Nk ps DO epstau Wk Nr xjk global TO global delh global n k l Bk Lq RG T Rp global nk BO eta global L uc global dp lambdaold global dxlv dx2v d T l v dT2v zv global reffxTmv xjk Nk DKn D epstau global kOs EdR alpha Tb global rf cm t m global DKneffO DeffrO p
n
dxlv=[] ;dx2v=n ;dTlv=[];dT2~= ;zv=[] ; %N2, H2, N H 3 , Ar, CH4 nk=5; nkl=n k-1; NS=[-1;-3;2;0;O];NR=NS; nue=sum( NS); RG=8.314;%m3 Pa/mol/K ps=300e5;%Pa p=300;%atm disp(’Bitte Temperatur (in K) eingeben!’) T=input(’Fur die Auswertung 623, 673 oder 723 eingeben’) c=ps/RG/T;%mol/m3 %r=k*( Ka*al*(a2^ 3/a3 ^ 2) ^alpha-(a3^ 2/a2-3) * (1-alpha)) %ai=fi=xi*fiO=xi*garnma*p
gammaN2=0.93431737+0.3101804~03*T+0.295896e-03*p... -0.2707279e-O6*T^2+0.4775207e-O6*p* 2; gammaH2=exp(exp(-3.8402*T ^O.125+0.541)*~... -exp(-O.l263*T ^ 0.5 - 15.980)*p * 2+300*exp(-0.011901*T-5.941). .. *(exp(-p/300)-1)); gammaNH3=0.1438996+0.2028538e-02*T-0.4487672e-03*p.. . -0. 1142945e-05*TA2+0.2761216e-O6*p * 2; gamma =[ga mma N2;gamma H2;ga mma NH31; %a3=x( 1:3).*gamma*p; delh=-105e3;%J/mol lglOKa=-2.691122*loglO(T)-5.519265e-05*T. .. 1.848863e-O7*T ^ 2+2001.6/T+2.6899;
+
374 7 Planen und Auswerten reaktionskinetischer Experimente IglOKa2=2*lglOKa; Ka2=10^ IglOKa2; km3=8.849e14*exp(-40765/1.987/T);%kmol/m3 Rv/hr k=km3/3600/0.6;%kmol/m3 Korn/s MG=[28;2; 17;40;16]; Rpore=3e-O8; DKn=2/3*Rpore*sqrt(8*RG*le3*298/pi*ones( nk,l)./MG); DO=7.08e-5*[0 10.302 0.239.0.267;O 0 1.04 ,986 .883;0 0 0 0.246 0.222;.. 0 0 0 0 0.2851; D=DO/p*(T/298)^ 1.75; epstau=0.25; DKneffO=epstau*DKn;DefF=epstau*DO; eta =3.0e-05;% kg/m /s
BO=Rpore/8*epstau; [ze,sp]=size( Deff); E=[ Deff;zeros(l,sp)]’; Deffz=[ Deff+ E( 1:ze,:) ;E( sp, :)] ; Deffz( l:sp+l:sp*sp)=l; DeffrO=ones(sp,sp). / Deffz; DeffrO( l:sp+ l:sp*sp)=O;
x~0=[0.22;0.66;0.02;0.05;0.05]; Nr=5; NSlv=ones( Nr,l)*NS( 1); %a=l; b=O;%Platte a = l ; b=l;%Zylinder xjz=oknullsy( Nr,a,b); [Az, Bz,Qz,Wz]=orthkol(xjz,b,a+l); Qiz=inv(Qz); Nk=3; a = l ; b=2;%Kugel xj k=okn uIIsy( Nk,a, b) ; [A k,Bk,Q k,W k]=ort hkol (xjk ,b ,a 1); Qik=inv(Qk);
+
k0=8.849e14;%kmoI/ m3 Rv/ hr k0=k0/3600/0.6;%kmol/m3 Kat/s Tb=700; EdR=40765/1.987; kOs=kO*exp(-EdR/Tb);%kmol/m3 Kat/s alpha=0.5;
L=l; d p=6e-03; Rp=dp/2 R=0.10/2;
7.3 Probleme und Ltlsungen
375
urho=2; TO=T; %Tu=TO-20*z/L; xo=xso;
cO=ps/RG/TO; MGQ=xO ' * MG; uOcO=urho/MGQ; uo=uoco/co;
%Pernr=uO*dp/Drnr; %Peclet Masse radial Pernr=lO; Garn=l/Pernr*dp/R*L/R; rhokat=3200*0.4; % kg/rn3, Schuettdichte cpG=3; % kJ/kg/K hLurcp= L/ urho/cpG*(-del h); %Pehr=uO*rhoG*cpG*dp/(larnr*le-3);
Pehr=2.5; Ga h= 1/ Pe hr*d p/ R* L/ R; %Bi= hw*R/larnr; Bi=l; BiGah=Bi*Ga h;
Anschliei3end ltidt man z. B. NH3ZXT723 fur die Meawerte bei 723 K und setzt global crn zrn zm=nh3utT723(:, 1); crn=nh3zxT723(: ,2);
Dann kann man die Eingangswerte noch mitnehmen: zrn=[O;zrn];crn=[O.22;crn];
ns=-l;nue=-2;
Man schreibt in NHQDIFF-AUS eine rationale Funktion, die auch Wendepunkte darstellen kann, und ruft NHQDIFF-AUS auf; der Plot (hier nicht ilbernommen) zeigt die ausgezeichnete Anpassung - trotz der Warnungen im MATLAB-Fenster wtihrend der Regressionrechnung. Man vergesse nicht, reff zu speichern! Entsprechend verftihrt man mit den MeDwerten bei den beiden anderen Temperaturen. Berechnung von Gleichgewichtswerten am Reaktoranfang - sie werden filr weitere Rechenschritte bentitigt:
376
7 Planen und Auswerten reaktionskinetischer Experimente
global x0 Ka2 ESM gamrnaN2 garnmaH2 garnrnaNH3 p SEM=[2 0;O 2 ; l 3];ESM=SEM’; nO=[xO( 1)/2;xO(2)-3*xO( 1)/2;~0(3)+2*xO( 1)/2];
Man braucht einigermden passende Startwerte, sonst erhalt man falsche Ergebnisse, zumindest mit den Standardeinstellungen. Zum Beispiel bewegt sich fsolve mit den Anfangswerten x0 als Startwerten und ohne den Faktor le5 in der f(3)-Zeile von NH3GL nicht von der Stelle, und mit dem Faktor le5 landet es bei unsinnigen negativen Werten. NH3GL
function f = nh3gl(n) %N2 H2 NH3 Ar CH4 global x0 Ka2 ESM garnrnaN2 gammaH2 gammaNH3 p f ( 1:2)=ESM * ( n-xO( 1:3)); ns=sum( n)+x0(4)+xO( 5); x=n/ns; a l=x( 1)*gamma N2*p; a2=~(2)*garnmaH2*p; a3=x( 3) *gamma NH3* p; f(3)=(a3^ 2/al/a2^ 3-Ka2)*le5; %Ende
ngl=fsolve(’nh3gl’,nO)%fmins bei SE ngl = 1.1469e-001 3.4408e-001 2.306le-001 ns=sum ( ngl) +xO( 4) +xO( 5); xgl=ngl/ns
xgl = 1.4529e-001 4.3588e-001 2.9214e-001
%Nicht bei SE ********* f( 3)=n h3gl(ngl) f(3) = 9.1693e-008 f( 1:2)=ESM*(ngLxO( 1:3)); f f =
8.2560e-008 -1.1517e-007 9.1693e-008
yo********************
f=nh3gl(ngl)%nur bei SE f =
2.4246e-019
7.3 Probleme und Losungen
377
Die Rilckreaktion kann bei Eingangsbedingungen vernachltissigt werden: al pha=O. 5; % der theoretische Wert al=xO( l)*garnrnaN2*p; a2=x0( 2)*garnrnaH2*p; a3=~0(3)*garnrnaNH3*p; rhin=Ka2*al.*(a2. ^3./a3. -2). ^alpha rhin = 1.9303e+000 rher=(a3. -2./a2. ^3).^(1-alpha) rher = 1.721le-003
Porendiffusion? Weisz-Prater-Kriterium Phi=nh3
ref~23(1)/(L/uOcO*O.6)*dp^2/36/(D(1,2)*epstau)/
...
(cO*le-O3)/(xO(l)-xgI( l))%uOcO, weil am Reaktoreingang
Phi = 2.7751e-001
ilber 0.1; dazu noch Produkt-Inhibierung im Term f i h die Hinreaktion! Filmdiffusion? N H 3 FILM DX
urho=2; Re=urho*d p/eta; rho=c*le-O3*MGQ; Sc=eta/rho/D( 1,2); Sh=1.55*Re ^0.55*Sc^( 1/3); beta=Sh*D( 1,2)/dp; reff=nh3 reft723(1);%~0(1)=0.22, TO = 723 K refFKorngeff/( L/uOcO*O.6); %beta*av*c*delxl=reffKorn delxl=reffKorn/beta/(c*le-03)/( 6/dp); delxlrel=delxl/xO( 1) delxlrel =
4.2339e-003
Der EinfluB der Filmdiffusion kann also vernachliissigt werden. Abschtitzung von Aktivierungsenergie und Htiufigkeitsfaktor: d723=n h3_reff723( 1); d623= nh3 -reff623 ( 1);
378 7 Planen und Auswerten reaktionskinetischer Experimente EdReff=-( log( r0723)-log( rO623))/( 1/723-1/623) EdReff = 5.2569e+003 EdRl=-(-EdReff-(-del h/RG)) EdRl = I .7886e+004%wennkein Porendiffusionseinflufi EdR2=-(-EdReff*2-(-del h/RG)) EdR2 = 2.3143e+O04%Porendiffu~i0n limitierend kOg7231=d723/( L/uOc0*0.6)*exp( EdR1/723)/.. . Ka2-723/a1-723/((a2-723^3/a3-723^2)^alpha) kOg7231 = 8.2723e+008 kOg7232=d723/( L/uOc0*0.6)*exp( EdR2/723)/. .. Ka2-723/a1-723/((a2-723 ^ 3/a3-723^ 2) ^ alpha) kOg7232 = 1.1896e+012 kOg6231=d623/( L/uOcO*0.6)*exp( EdR1/623)/. .. Ka2-623/a1-623/((a2-623^ 3/a3-623^ 2) ^ alpha) kOg6231 = 7.9782e+008 kOg6232=d623/( L/uOcO*O. 6)*exp( EdR2/623)/. .. Ka2-623/a1-623/( (a2-623 ^ 3/a3-623^ 2) ^ alpha) kOg6232 = 3.6857e+012
Damit sind Grenzen abgesteckt, zwischen denen eine grobe Gittersuche hinreichend gute Anfangsschgtzwerte filr eine abschliefiende Regressionsrechnung liefern kbnnte. Gittersuche reffxTmv=
[I;
Die Elemente der folgenden Vektoren beziehen sich alle auf die Stellen z = 0.2,0.4,0.6. reffiTrnv= [nh3 -reff623( [3,5,7])] ' ; refhtTmv= [refhtTmv;[nh3-reft723( [3,5,7])] '1 ; refhtTmv(:,2:6)=[nh3zxT623( [2,4,6],2:6);nh3zxT723( [2,4,6],2:6)]; refhtTrnv(:,7)=[nh3zxT623( [2,4,6],7);nh3zxT723([2,4,6],7)]; reffxTmv = Columns 1 through 6
2.9080e-002 2.1675e-001 6.5025e-001 3.1842e-002 5.0581e-002 5.0581e-002 2.8632e-002 2.1345e-001 6.4034e-001 4.3873e-002 5.117Oe-002 5.117Oe-002 2.6823e-002 2.1024e-001 6.3072e-001 5.5552e-002 5.1743e-002 5.1743e-002 8.3428e-002 2.0987e-001 6.296Oe-001 5.6910e-002 5.1809e-002 5.1809e-002 6.1947e-002 2.0123e-001 6.0369e-001 8.8379e-002 5.3352e-002 5.3352e-002 4.1152e-002 1.9509e-001 5.8527e-001 1.1074e-001 5.4448e-002 5.4448e-002
7.3 Probleme und Ltlsungen
379
Column 7 6.4077e+002 6.5420e+002 6.6216e+002 7.7780e+002 8.0974e+002 8.1904e+002 Die folgende Gittersuche und die anschliefiende Regression benbtigen bei der SE mehr Zeit als bei der Vollversion, da die Optimierroutine fmins die Aufgaben von leastsq und fsolve aus der Optimization Toolbox ltbernehmen mui3 und nicht immer mithalten kann. nh3gitter startet die Gittersuche. NH3GITTER
imat=[le8, leg, le10,l e l l , le12, le131; jmat=[1.7,1.9,2.1,2.3]*le4; kmat=[0.4,0.5,0.6,0.7,0.8]; ffv=[] ; for i = imat for j = jmat for k = kmat f=nh3lsgit( [i,j,k]); ff=f'*f ffv=[ffv,ff]; end end end N H 3 L S G I T wird hier nicht wiedergegeben. Das Losungsverfahren zur Berechnung von reff im Korn kann man besser, weil einfacher, anhand der Probleme 6.3.6 und 6.3.7 studieren. Die folgenden Anweisungen finden die kleinste Fehlerquadratsumme der Gittersuche und die zugehbrigen Parameterwerte:
min(ffv) ans =
9.1232e-005 ij=find(fFv==min(ffv)) ij = 74
Die zum 74. Schritt der Gittersuche gehbrenden Parameterwerte ergeben schon eine ganz gute Anpassung; sie werden als Anfangsschtitzwerte filr eine Regressionsrechnung verwendet:
380 7 Planen und Auswerten reaktionskinetischer Experimente f=nh3ls( [lell*exp(-2.1e4/700),2.le4,0.7]) kinpar = 9.3576e-003 2.1000e+004 7.0000e-001 f = -7.6348e-004 7.2272e-004 1.4329e-003 3.1903e-003 5.8369e-003 6.6202e-003 Das U P N H 3 L S l6st die Korngleichungen nach dem SGM, so wie es im Abschnitt 6.2 beschrieben und in mehreren Aufgaben erlsutert wurde, berechnet r e f f und daraus die Abweichungen von den gemessenen Werten: kinpar=leastsq( 'nh3ls', [ lell*exp(-2.le4/700) ,2.le4,0.7]) kinpar = 3.5311e-002 2.1000e+004 5.7237e-001 kinpar = 3.531131968577535e-002 2.099999997017176e+004 5.723728198667224e-001 %also doch eine ganz geringfilgige Anderung der Aktivierungsenergie im Verlauf der Regression!% Die Abweichungen: f=nh3ls( kinpar) kinpar = 3.5311e-002 2.1000e+004 5.7237e-001 f = 8.1472e-004 7.6768e-004 4.5079e-004 -1.2872e-003 -3.8626e-004 1.7361e-003 Die Fehlerquadratsumme: f'*f ans =
6.2765e-006
Die prozentuale Abweichung zwischen gemessenen und Regressionswerten:
7.3 Probleme und Losungen
381
f./reffxTmv(:,1)*100 ans = 2.8017e+000 2.6812e+000 1.6806e+000 -1.5429e+000 -6.2353e-001 4.2187e+000
Abweichungen und Fehlerquadratsumme mit den ,,wahren" (bei der Simulation vorgegebenen) Parametern: n h3fbrdat f=nh3ls([kOs, EdR,0.5]) kinpar = 7.6556e-002 2.0516e+004 5.0000e-001 f = - 1.1079e-004 -7.1695e-004 -1.4285e-003 -1.5018e-003 -1.4227e-003 6.1649e-004 f'*f ans = 7.2266e-006
Mit den vorgegebenen (,,wahren") Parametern also etwas schlechter, d. h. die ,,Meawerte" reff stimmen nicht mit den wahren Werten tiberein; liegt das tiberwiegend oder ausschliefllich an der Differentiation? Eine kritische Betrachtung zeigt: Das Auswerteverfahren hat einen prinzipiellen Fehler! Wenn die W&rmeverluste im Versuchsrektor durch radiale WSirmeleitung zustande kommen, dann mtissen auch radiale Konzentrationsprofile und damit radiale Stoffdispersion auftreten. Das wurde bei der Auswertung nicht berticksichtigt, weder hier bei der Simulation noch in der Vorlage [38]. Wir haben also bei der Differentiation zur Gewinnung der Reaktionsgeschwindigkeit in der Bilanz
(7.48) den Dispersionsterm nicht berticksichtigt. Ob das gerechtfertigt ist, oder wo irn Reaktor die Dispersion den greaten Einfld hat, kennten Sie vielleicht am besten beurteilen, wenn Sie die Simulation der axialen Konzentrations- und Temperaturprofile selbst durchfilhren. Alle erforderlichen Daten sind in der
382 7 Planen und Auswerten reaktionskinetischer Experimente Datei NH3FBRDAT. (Uber die Wahl mancher Parameterwerte kann man durchaus diskutieren!) Anleitung zur Berechnung eines nichtisothermen FBR mit Diffusionseinflufl im Korn finden Sie im Problem 6.3.8. Eine weitere reizvolle Aufgabe kunnte sein, das Auswerteverfahren der Vorlage [38] auf die hier simulierten Daten anzuwenden, um den Unterschied zum SGM zu sehen.
Anhang A
Einige weitere Moglichkeiten von MATLAB A.l
Menu-Fuhrung
Wer Programme fur den eigenen Gebrauch erstellt, kommt i. a. mit der Methode aus, die in diesem Buch verfolgt wurde: Ein Datenfile wird gegebenenfalls ediert und im MATLAB-Fenster aufgerufen; damit werden alle Daten bereitgestellt, die fur einen Rechenlauf benbtigt werden; der Rechenlauf selbst wird entweder aus dem MATLAB-Fenster gestartet oder aus dem SIMULINK-Menu. Man kann sich komfortablere Mbglichkeiten vorstellen, MenWhrungen oder grafische Oberflachen, und fUr beide stellt MATLAB Werkzeuge zur Verfllgung. Wenn man fur Dritte schreibt, wird man solche Hilfsmittel in Erwiigung ziehen mussen, fur den Eigenbedarf dUrfte sich der Aufwand aber nur unter besonderen Ums t a d e n lohnen. Auch dann sollte man sich auf das Erforderliche beschriinken und miiglichst einfache Mittel einsetzen. Ein Beispiel mbge das verdeutlichen: Im Abschnitt 4.2 wird der Betrieb eines Reaktionskalorimeters beschrieben. Wegen der vielen Betriebsmbglichkeiten erklart ein Hilfe-File RKLHELP, wie man vorgehen kbnnte. Das Datefile GLOB setzt alle Standardeinstellungen; es wird empfohlen, dieses File nicht zu edieren, sondern den veriinderbaren Parametern in einem anderen File, RKLSTAPA, die gewhschten Werte zuzuweisen, oder genauer gesagt: in Kopien dieses Files, die dann als Versuchsdokumentation dienen kbnnen. Man kunnte diese Vorbereitungen etwas vereinfachen und vor allem die Endkontrolle der Parameterwerte erleichtern, indem man mit Hilfe des MATLAB-Befehls m e m ein WahlmenU erzeugt; das File EINGABE2 gibt ein Beispiel, das allerdings nur auf den Sulfonierungsversuch zugeschnitten ist. Wenn Sie glob und anschliefiend eingabe2 im MATLAB-Fenster eingeben, erhalten Sie eine Menilleiste (Abb. A.l).
384 A Einige weitere Mtiglichkeiten von MATLAB
Abbildung A. 1: Menil-Leiste Reaktionskalorimeter. Anklicken eines Schalt-Feldes ergibt eine Eingabeaufforderung im Fenster, mit mehr oder weniger ausfilhrlichen Kommentaren (die man durch Verwdern des Files E I N G A B E ~leicht seinen Beditrfnissen anpassen ktjnnte); das Feld ,,weitere Parameter" fiihrt auf eine zweite Mentileiste. Das letzte Feld auf jeder der beiden Menilleisten gibt den Parametersatz im Fenster aus und schreibt ihn gleichzeitig in eine Datei, die dann zur Dokumentation benutzt werden kann; der Benutzer gibt den Namen der Datei an, das Programm prilft, ob sie bereits exist iert . Selbstverstandlich lai3t sich eine solche Menitfilhrung komfortabler gestalten, mit eigenen Kommentar- und Ausgabefenstern zum Beispiel, die itbersichtlicher sind als das MATLAB-Fenster. Ob sich der meist erhebliche Aufwand lohnt, sollte sorgfatig abgewogen und im Hinblick auf den Zweck entschieden werden.
A.2
GUIs
Wenn man sich auf den eigenen Bedarf beschrankt, erscheinen grafische Benutzeroberflachen (Graphical User Interface) noch unntltiger als MeniifiLhrungen, zumal der Aufwand, sie herzustellen, doch betrtichtlich ist - trotz aller Hilfsmittel, die MATLAB zur Verftigung stellt. Dennoch gibt es Anforderungen, die einen solchen Aufwand lohnend machen ktinnen. Es folgen zwei Beispiele aus eigener Erfahrung: Das erste betrifft eine in MATLAB eingebundene Stoffdatenbank, die bei re-
A.3 Neuronale Netze - ein Beispiel fur
Toolboxen 385
aktionstechnischen Berechnungen au5erordentlich niltzlich ist. Die Stoffe, deren Daten man benutzen mkhte, kbnnen mit ihren englischen Namen eingegeben werden; diese Eingabe ist in mehrfacher Hinsicht fehleranfallig, insbesondere gegen Schreibfehler. In einem solchen Fall ist die Auswahl aus einer listbox hilfreich, wie sie in Abb. A.2 wiedergegeben ist. Das zweite Beispiel betrifft das Anpassen von Kurven an Me5werte. Vor allem beim numerischen Differenzieren ist es hilfreich, schnell und bequem zwischen verschiedenen Funktionen wkhlen zu kbnnen und das Resultat sofort grafisch vor Augen zu haben. In Abb. A.3 ist ein GUI aus einer reaktionskinetischen Toolbox zu sehen, das eine ganze Reihe von Wahl- und Darstellungsmbglichkeiten enthtilt.
A.3
Neuronale Netze - ein Beispiel fur Toolboxen
Neuronale Netze haben Eingang in die CRT gefunden (s. z. B. [39]). Wer sich mit diesem Gebiet ntiher beschgftigen mbchte, dem steht mit MATLABs Neural Network Toolbox ein gutes Hilfsmittel zur Verfiigung. An einem ganz simplen Beispiel soll der Einsatz dieser Toolbox demonstriert werden: In einem CSTR wird aus einem Ausgangsstoff A ein Produkt P hergestellt. Die Zulaufkonzentration von A ist 1 in konsistenten Einheiten, die von P ist Null; die Zulauftemperatur ist auf 420 K eingestellt, die Verweilzeit betr> 60 s. Betriebsschwankungen sollen durch eine Regelung ausgeglichen werden, die bei Abweichungen vom Sollwert der Ablaufkonzentration P die Eingangstemperatur To vertindert; P kann zusammen mit der Konzentration von A und der Temperatur T alle 30 s bestimmt werden. Da kein Modell des Reaktionssystems vorliegt, soll aus den Ein- und Ausgangswerten ein datengetriebenes Modell erstellt werden, mit dessen Hilfe die gewilnschte Regelung implementiert werden kann. Da die bisher vorliegenden Prozefldaten nicht ausreichend erscheinen, sollen die erforderlichen Ein- und Ausgangswerte durch kurzzeitige Storungen des Betriebszustands gesammelt werden, ohne die Produktion nachhaltig zu storen; insbesondere darf die Temperatur 450 K hbchstens kurzzeitig ilberschreiten. Wir beschrgnken uns hier darauf, zwei Modelle zu erstellen, die in der Regelungstechnik im Zusammenhang mit dem Begriff ,,interne Modellregelung" (internal model control) diskutiert werden (s. z. B. Shinskey [40]): ein Proze5mc~ dell, das aus den augenblicklichen Ein- und Ausgangsdaten die Ausgangsdaten nach dem ntichsten Zeitschritt vorhersagen kann, und ein inverses Prozef3modell, das aus den augenblicklichen Ausgangsdaten und gewunschten nschsten Ausgangsdaten entsprechende Eingangsdaten berechnet. In unserem Fall k6nnte also das Modell aus A ( t ) , P ( t ) ,T ( t )und To(t)die GrUf3en A(t l ) , P(t 1) und T ( t 1) berechnen, das inverse Modell To(t)aus A ( t ) , P ( t ) ,T ( t )und dem gewtinschten P(t l ) , also dem Sollwert.
+
+
+
+
386
A Einige weitere Moglichkeiten von MATLAB
Abbildung A.2: GUI Stoffdatenbank (erstellt von Olaf Klein).
Abbildung A.3: GUI Reaktionskinetik (erstellt von Arne Ohrenberg).
A . 3 Neuronale Netze - ein Beispiel filr
Toolboxen 387
Den Betrieb der Anlage simdiert ein SIMULINK-Model1NEURAL(Abb. A.4).
CSTR. MDL
Abbildung A.4: Anlage mit CSTR.
Zunachst kann man sich von den Werten am stationtiren Zustand ilberzeugen: Dazu ersetzt man den Zufallsgenerator durch einen Constant-Block mit dem Wert 0. Das weitere Vorgehen kbnnte dann wie folgt sein (die erforderlichen Anderungen in NEURAL-CSTR.MDL seien dem Leser fiberlassen): Man tindert nach einem Zufallsprozefi die Eingangstemperatur in ma ig e n Grenzen, wobei wir zur Vereinfachung annehmen, die Regelung fiir die Eingangstemperatur sei so schnell, dai3 wir ihre Dynamik gegeniiber der des Reaktors nicht beriicksichtigen miissen. Wir messen im Analysentakt von 30 s die Ablaufkonzentrationen von A und P sowie die Reaktortemperatur T und die Zulauftemperatur To. Mit diesen Daten trainieren wir zwei neuronale Netze, eins filr das Prozei3modell, das andere filr das inverse Modell. Ein Beispiel sollte genilgen: Wtihlen wir das inverse Modell, und verschaffen wir uns genilgend Datenstitze, indem wir 12000 s als Stop time filr den SIMULINK-Lauf ansetzen: size(APTT0) ans =
401 4
Die ersten 100 Datenstitze ilbergehen wir grofizilgig, um keine Daten aus dem Anfahrvorgang mitzunehmen; wir wiihlen den am htiufigsten benutzten Algorithmus, den Backpropagation-Algorithmus, und folgen dabei im wesentlichen der Einfilhrung im Kapitel5 im Handbuch von MATLABs Neural Network Toolbox; so konnen wir praktisch ohne Vorkenntnisse ein neuronales Netz trainieren. P=[APTTO( 100:400,1:3) ,APTTO( 101:401,2)];%Eingangsgrbfien fiir das Netz% T=APTTO( 100:400,4); %Zielgrbfie PR=rninrnax( P’);
Ein Netz mit drei Lagen: Eingang, hidden layer, Ausgang; die Anzahl der Neurons in dem mittleren layer wurde in Anlehnung an ilbliche Werte in der Literatur gewtihlt; die linearen Transferfunktionen (purelin) ergaben sich durch Probieren.
388 A Einige weitere Moglichkeiten von MATLAB net =newff( P R ,[48 11,{ ' pure1in' ,' pure1in ' pure1in' } ,' t rainI m ' ) ; net=train( net,P',T');%DieseAnweisung milssen wir gegebenenfalls einige MaI,
le wiederholen!% a Minv=sirn( net,P');%Simulation
des Netzes
Ein Vergleich gemessener und (mit dem Netz) simulierter Daten (Abb. A.5) zeigt gute Obereinstimmung: plot( P(:,4),T,'x',P(:,4),aMinv,'01)
440
0'
435 430 Y
425 0
G~ 420t-
415-
-ox Q
410-
0
I
$
O
:
-
$
a x o "
8 ?,* a .
405-
0 0
0
x
P O
0 0
Abbildung A.5: Gemessene (x) und vom neuronalen Netz berechnete tenpaare To - xp.
(0)Da-
Regression gemessener gegen berechnete Eingangstemperaturen: Der Korrelationskoeffizient R zeigt ebenfalls die gute Anpassung des neuronalen Netzes (Abb. A.6). [m,b,r]=postreg(aMinv,T')
(Im weiteren Verlauf einer solchen Modellierung wilrde das Model1 gegen Daten getestet werden, die nicht filr die Anpassung verwendet wurden!) Zum Abschlui3 noch eine interessante Mtrglichkeit: Der Befehl gensim(net,30) erzeugt einen SIMULINK-Block des Netzes, den wir in ein SIMULINK-Model1 einfilgen kunnten (Abtastrate 30 s).
A.4 CFD 389
Best Linear Fit: A = (0.965) T t (14.9) 440 435
Data Points
430
Best Linear Fit
425
<
420
41 5 41 0 405 400 400
41 0
420 T
430
440
Abbildung A.6: Test des neuronalen Netzes (gemessene gegen berechnete Werte).
A.4
CFD
Computational Fluid Dynamics ist auf dem Vormarsch und auch schon in die CRT eingezogen. Welche Hilfsmittel stellt MATLAB fur dieses Gebiet zur Verfilgung, wobei uns naturlich die Kopplung der Impulsbilanzen mit Stoff- und Energiebilanzen vor allem interessiert? Grundstltzlich konnen wir alle Methoden verwenden, die wir in diesem Buch filr PDGls kennengelernt haben; das trifft besonders auf die FVM zu, die j a vornehmlich fiir solche Zwecke entwickelt wurde, wie der Buchtitel von Patankar [19] ausweist. Allerdings ist die Berechnung von Stromungsfeldern wesentlich aufwendiger als die Losung von Stoff- und Energiebilanzen. In der Impulsbilanz steckt niimlich der Druckgradient, und fur den gibt es keine direkte Beziehung. Das Druckfeld ist indirekt bestimmt ilber die Kontinuittltsgleichung: Wenn das richtige Druckfeld in die Impulsbilanz eingesetzt wird, erfilllt das berechnete Geschwindigkeitsfeld die Kontinuitatsgleichung. Nur wenn das Druckfeld im voraus bekannt ist, kann man die Impulsbilanz mit denselben Diskretisierungsgleichungen angehen, die wir fur die anderen Bilanzen kennengelernt haben. Meistens ist das Druckfeld aber nicht bekannt, und dann m d man zu besonderen Mahahmen greifen. Man kann eine iterative Druckkorrektur benutzen, wie es in [19] beschrieben ist. Es ist noch eine weitere Schwierigkeit zu bewtlltigen: In der diskretisierten Impulsbilanz wirkt am Gitterpunkt P die Druckdifferenz p, - p , ; d a aber in der Rechnung fiir den Druck nur Werte an den Gitterpunkten W, P, E vorliegen, mussen die Werte auf den Fliichen der Bilanzvolumina durch Interpolation
390 A Einige weitere Mtrglichkeiten von MATLAB ermittelt werden. Geht man von einem abschnittsweise linearen Druckverlauf aus, so erhalt man
Der Druckgradient wird also auf einem grbberen Gitter berechnet. Das kann zu einem unsinnigen, oszillierenden Druckfeld filhren. Abhilfe kann ein versetztes Gitter fiir die Stri)mungsgeschwindigkeitenschaffen, auf das wir nicht n&her eingehen wollen ( s . z. B. [19]). Man hat aber nun zwei oder sogar mehrere Gitter zu verwalten, was zusammen mit der iterativen Druckkorrektur (oder einem anderen Verfahren zur Berechnung des Druckfeldes) die Programmierung doch wesentlich aufwendiger macht. Auch hat sich gezeigt, dai3 man in vielen Fallen ohne eine Unterrelaxation nicht auskommt. Man wird also nicht so schnell eine Ad-hoc-LGsung zustande bringen, wie es bei den bisherigen Problemen oft der Fall war. Das gilt selbst fur ganz einfache Strbmungsprobleme. Um den eigenen Programmieraufwand zu reduzieren, wird man sich gerne einer geeigneten kommerziellen Software bedienen. Hier bietet sich FEMLAB an, das sich problemlos in MATLAB integrieren laflt, wie schon im Abschnitt 2.5 erwahnt und im Problem 5.5.15 beispielhaft gezeigt wurde. Da FEMLAB filr die Losung von PDGls entwickelt wurde, laat es sich natilrlich auch fiir CFDZwecke einsetzen; ein besonderer CFD-Modul ist im ilbrigen schon angekilndigt. Um eine Vorstellung zu vermitteln, wie man mit FEMLAB CFD und CRT verbinden kann, sei folgendes Problem behandelt (das in der Neuauflage von FEMLABs Model Library zu finden sein wird und fur das vorliegende Buch freundlicherweise vorab von Dr. Ed Fontes von der COMSOL AB zur Verfilgung gestellt wurde) : Ein zylindrisches Katalysatorkorn wird von einer Gasstrbmung mit einer Komponente umspult, die sich im porbsen Korn nach einer Reaktion zweiter Ordnung umsetzt. Es sollen Konzentrations- und Strbmungsfeld (laminar) berechnet werden. Folgende Werte sind gegeben: rho miu D Deff k vo clo
Gasdichte p Gasviskositat ,u Diffusionskoeffizient der reagierenden Komponente effektiver Diffusionskoeffizient D , f f der reagierenden Komponente im Korn Geschwindigkeitskonst ante Strbmungsgeschwindigkeit uo am Eingang des Bilanzgebiets Eingangskonzentration cy der reagierenden Komponente
0.66 kg/m3 2.6.10-5 kg/(m s)
1.10-~ m2/s 1.10-6 m2/s 100 m3/(s mol)
0.1 m/s 1.3 moi/m3
Wir nehmen an, dafl die Dichte und Temperatur konstant bleiben. Die Bilanzraumgrenzen setzen wir so (Abb. A.7), dai3 folgende Randbedingungen angewendet werden kbnnen:
A.4 CFD 391
sout I
sp12
sff 1
sff 2
sin
Abbildung A . 7 Bilanzgebiete und Riinder.
sin: uy = 210, u, = 0, co = clo
sf€l und sff2:
spll:
-a =C o
ax
sp12:
up = 0 , sout :
21,
=0
392 A Einige weitere Mtlglichkeiten von M A T L A B Im Bilanzgebiet fiir die Strbmung, R1, kbnnen die Navier-Stokes- und die Kontinuittitsgleichung angesetzt werden (zur Vereinfachung der Schreibweise in Vektorform) :
pV2u+p(u. V)u
+ vp = 0
v.u=o Die Stofiilanz in R1 ist:
v . (-DVc+cu)
=0
Im Bilanzgebiet CO1, also im Korn, gilt die Stofiilanz:
v
'
( 4 , f f V C ) - kc2 = 0
(A.lO)
Geometrie, Gleichungen, Randbedingungen und Werte kann man nun bequem in verschiedenen Fenstern des FEMLAB-GUIs eingeben. Die Bilanzgebiete werden im Draw Mode erzeugt. Abb. A.7 zeigt das Ergebnis, die grau unterlegten Bereiche, die anschlief3end in ein MATLAB-Figure kopiert und dort mit den Bezeichnungen fiir die Rgnder einschliefilich der Pfeile angereichert wurden. Die inkompressible Navier-Stokes-Gleichung gehijrt zu FEMLABs Modellgleichungen; sie mui3 nur ausgewtihlt und filr den Bereich CO1 ilber eine Schaltfltiche desaktiviert werden. Die Randbedingungen sind zum Teil schon vorformuliert, z. B. als No-slip (hier fur sp12) oder als Slzp/symmetry (hier filr sffl und sm). Die Stoffbilanzen fiir die beiden Bereiche R1 und CO1 werden im sog. Multiphysics-Modus als PDE, general form, aus den Modellgleichungen hinzugefilgt; sie hat die Form: V r = F , wie sie schon im Problem 5.5.15 verwendet wurde. Fiir F wird z. B. im Bereich CO1 der Ausdruck (-k. * c."2) eingetragen, wie man sieht, mit MATLABs speziellen Operatoren. Im Mesh Mode wird das Finite-Elemente-Gitter erzeugt, im Prinzip durch einfaches Anklicken, hier durch einige Eintrtige a n sensitiven Stellen verfeinert, wie aus dem linken Teilbild in Abb. A.8 hervorgeht. Die Anweisung Solve erzeugt die Lbsung, die grafisch mit einer Farbskala ausgegeben wird. Die Grafik kann man leicht nach seinen eigenen Vorstellungen verandern. Filr das rechte Teilbild in Abb. A.8 wurden Pfeile zur Darstellung des Strtjmungsfeldes gewtihlt und eine Grauskala filr die Konzentrationsverteilung. Wenn auch nicht so schbn wie Farbabstufungen, zeigt auch diese filr den Buchdruck gewtihlte Variante deutlich: Die Reaktion ist so schnell, d d die reagierende Komponente kaum in das porbse Korn eindringen kann, mit anderen
A.4 CFD 393
Worten: Hier ist die Filmdiffusion der geschwindigkeitsbestimmende Schritt. Die Diffusionsgrenzschicht um das Korn ist alles andere als symmetrisch, wie es bei den Ublichen Transportansiitzen fUr die Filmdiffusion angenommen wird. Wenn Sie dieses an sich ja sehr einfache Problem selbst programmieren, sei es mit finiten Differenzen, der FVM oder mit der mathematisch schon anspruchsvolleren FEM, werden Ihnen vermutlich anschliefiend die Kosten filr FEMLAB nicht als zu hoch erscheinen. Die gesamte Problemstruktur wurde als cell array ,,fern" in den MATLABArbeitsspeicher ubertragen und im File PELLET-FEM.MAT gespeichert (nicht fur SE). Im Problem 5.5.15 findet man einige Hinweise zum Umgang mit fern.
Abbildung A.8: Reaktion in einem laminar umstrbmten Katalysatorpellet. Links: FE-Gitter. Rechts: Konzentrationsverteilung des Edukts (Grauskala) und Stramungsfeld (Pfeile).
Aus technischen Gründen bleibt diese Seite leer
Literaturverzeichnis [l]W.H. Ray, Advanced Process Control, Mc-Graw Hill, New York, 1981 [2] A. Lowe, Chem. Eng. Sci. 1996, 51, 1267
[3] R.W. Missen, W.R. Smith, J. Chem. Educ. 1989, 66(3), 217 [4] M. Baerns, H. Hofmann, A. Renken, Chemische Reaktionstechnik, 2. Aufl., Thieme, Stuttgart, 1992 [5] E. Fitzer, W. Fritz, G. Emig, Technische Chemie - Einfuhrung in die Chemische Reaktionstechnik, Springer, Berlin, 1995 [6] R.C. Reid, J.M. Prausnitz, B.E. Poling, The Properties of Gases & Liquids, 4th edition, McGraw-Hill, New.York, 1989 [7] M. Boudart, Kinetics of Chemical Processes, Prentice-Hall, Englewood Cliffs, 1968 [8] K.M. Sundaram, G.F. Froment, Ind. Eng. Chem. Fundam. 1978, 17(3), 174 [9] Perry’s Chemical Engineers’ Handbook, McGraw-Hill, New York, 1984 [lo] K.E. Brenan, S.L.CampbeU, L.R. Petzold, Numerical Solution of InitialValue Problems in Differential-Algebraic Equations, North Holland, New York, 1989 [ll]M. Schlegel, A. Lbwe, Chemical Engineering and Processing 1998, 37, 61
[12] F. Stoessel, cav - chemie-anlagen
+ verfahren, Heft 7/91
[13] P. Wittmer, T . Ankel, H. Gerrens, H. Romfis, Chem.-1ng.-Techn. 1965, 37, 392 [14] R. v. Watzdorf, F. Allgdwer, A. Helget, W. Marquardt, E.D. Gilles, Dynamische Simulation verfahrenstechnischer Prozesse und Anlagen -Ein Vergleich von Werkzeugen, in Simulationstechnik, Tagungsband (herausgegeben von G. Kampe und M. Zeitz), Stuttgart, Oktober 1994 [15] J.W. Hiby, Interactions between Fluids and Solids, Inst. Chem. Eng., London 1962, S. 312
396 Literaturverzeichnis [16] J. Stoer, R. Bulirsch, Numerische Mathematik, Bd. 2, Springer, Berlin, 1990 [17] R. Bulirsch, Die Mehrzielmethode zur numerischen LUsung von nichtlinearen Randwertproblemen und Aufgaben der optimalen Steuerung, CarlCranz-Gesellschaft, Technischer Report 1971 [18] Y.S. Matros, Catalytic Processes under Unsteady-State Conditions, Elsevier, New York, 1989 [19] S.V. Patankar, Numerical heat transfer and fluid flow, Hemisphere Publishing Corporation, Cambridge, 1980 [20] B.A. Finlayson, The method of weighted residuals and variational principles, Academic Press, New York, 1972 [21] A.H. Stroud, D. Secrest, Gaussian Quadrature Formulas, Prentice-Hall, Englewood Cliffs, 1966 [22] 0. Levenspiel, Chemical Reaction Engineering, Wiley, New York, 1972 [23] R. Taylor, R. Krishna, Multicomponent mass transfer, Wiley, New York, 1993 [24] J.A. Wesselingh, R. Krishna, Mass Transfer, Ellis Horwood, New York, 1990 [25] K.P. McCarty, E.A. Mason, Phys. Fluids 1960, 3, 309 [26] F. Keil, Diffusion und Chemische Reaktionen in der Gas/Feststoff-Katalyse, Springer, Berlin, 1999 (271 E.A. Mason, A.P. Malinauskas, R.B. Evans, J. Chem. Phys. 1967, 46, 3199 [28] R. Jackson, Transport in porous catalysts, Elsevier, New York, 1977 [29] P. Hugo, Chem. Eng. Sci. 1965, 20, 385, 975 [30] G.F. E’roment, K.B. Bischoff, Chemical Reactor Analysis and Design, Wiley, New York, 1979 [31] Y. Bard, Nonlinear Parameter Estimation, Academic Press, New York, 1974 [32] H.G. Bock, Recent Advances in Parameter Identification Techniques for O.D.E., in Deuflhard and Hairer (Hrsg.), Numerical Treatment of Inverse Problems in Differential and Integral Equations, Progress in Scientific Computing 1983, 2, 95 [33] D.M. Himmelblau, C.R. Jones, K.B. Bischoff, Ind. Eng. Chem. Proc. Des. Dev. 1967, 6, 536
Literaturverzeichnis 397
[34] G.E.P. Box, H.L: Lucas, Design of experiments in nonlinear situations, Biometrika 1959, 46, 77 [35] G.E.P. Box, W.G. Hunter, A useful method for model-building, Technometrics 1962, 4, 301 [36] O.A. Hougen, K.M. Watson, Chemical Process Principles, Part 3, Kinetics and Catalysis, Wiley, New York, 1947, S. 943 - 985 [37] J. W. Blakemore, A. E. Hoerl, Fitting nonlinear reaction rate equations to data, Chem. Eng. Progr. Symp. Ser. 1963, 59(42), 14 [38] W. Auer, H. Bakemeier, H. Detzer, R. Krabetz, Chemie-1ng.-Techn. 1964, 36, 774 [39] D.R. Baughman, Y.A. Liu, Neural Networks in Bioprocessing and Chemical Engineering, Academic Press, New York, 1995 [40] F.G. Shinskey, Process Control Systems, 4th edition, McGraw-Hill, New
York, 1996
Index Kursiv gesetzte Seitenzahlen zeigen den Ausdruck eines (kommentierten) Programms an.
A 3 B C D E , 135 ABCDE, 96, 129, 132
ABCDE-GL-SYS.MDL, 148 ABCDE-GL.F,137, 147 A B C D E ~ ,132 A B C D E 2 , 134 ABCDEABC, 97, 130
ABCDEF -B , 109 ABCDEGL, 97, 129 ABCDKIN2, 321
AG1Loser, 81, 128 AGls, 5, 133 Differenzieren, 3, 105, 133, 284 lineare, 10, 27, 81 F'undamentalli)sung, 27, 30, 195 symbolische Losung, 181 nichtlineare, 10, 40, 42, 81, 99, 176, 208, 281 Anfangsbedingungen konsistente, 3, 134, 288 Antwortflkhe, 325 AUSWERT7, 322 Backpropagation, 387 Batch-Reaktor, 44 BBLSQ2, 355 BOCKFCON, 334, 337 BOCKFUN, 213, 290 B O L U ~ F U N 357 , B O L U 1 L S , 357 Bulirsch'sches Randwertproblem, 209
C Mex-file, 15 C-Compiler, 23 ~ 2 ~63, 6 68, , 70 C2H6-DAT1 87 C 2 H 6 C O N , 66 C 2 H 6 K I N , 66 C 2 H 6 K I N M 86
,
C2H6RATEM,
87
callback, 237 CBAUFLS, 362 CBAUFLSK, 362 CBCULRF-NH3,
372
CBDBBDT, 348 CBDCPDT, 348 CBMOAUDE, 346, 347 CBMOAULR, 349, 350, CBMODAUF, 361 CBRAFLR, 352 CCODAT, 296 CCODGL, 298 CCOFBRDAT,
300
CCOFBRGA, 302 CCOFBRREFF, CCOKIN, 299
303
CCOSOL, 298 CH3CHG12,
283 286
CH3CHODAT,
C H 3 C H O G , 282 CH3CHOLS, 281 CH3CHOST, 283 CH3CODAT, 280 C H E C O M P 2 , 64
352
INDEX 399 CHECOMP2, 68, 70, 91 64, 68, 72, 87, 91, 96 CHOFBRDAT, 286 CHQFBRG, 286 CHOFBRKIX, 288 CHOSTART, 288 Compiler chemischer, 70, 72 COPOHEAD, 124 COPOIN, 125, 127 C o P o I N 1 , 127 COPOLY, 124 CSTR, 101 dynamisches Verhalten, 162, 166 Kaskade, 123 stationarer Betriebspunkt, 161, 164 Sttlrfall, 170 Ubergangsverhalten, 167 W%rmellbergangskoeffizient,153 CHEMDGL,
DAG1Index, 2 Ltlser, 2, 99, 105, 108, 133 externe, 63, 106, 136 DAGls, 2, 22, 63, 96, 105, 128, 292 Index, 105, 179 rnit Unstetigkeiten, 104, 108 DELCP,85 DEMUX, 119 Demuz-Block Ausblendevektor, 117 DEST-P-PROFIL, 186 Destillationskolonne, 175 SIMULINK-Modell, 182 DG1Laser, 46, 128, 271 DGls, 5, 10, 43, 67 mit Unstetigkeiten, siehe DAGls mit Unstetigkeiten steife, 49, 52, 99, 131, 132 symbolische Lasung, 46, 48 Differential-Algebraische Gleichungen, siehe DAGls Differentialgleichungen, siehe DGls
Differentialgleichungen,partielle, siehe PDGls Differenzieren numerisches, 310, 385 axiale Konzentrations profile in einem Versuchsreaktor, 371 rnit Polynomen, 342 rnit rationalen Funktionen, 310, 350 mit Splines, 342, 347 Diffusion molekulare, 274, 293 Diskretisierung, 11, 201, 216, 220 Dispersion, 201 dusty gas model, siehe SGM
Eigenwert-Eigenvektor-Zerlegung,307, 329 Element-Spezies-Matrix, siehe ESM Elementarbilanzen, 25, 30, 33, 78, 81 Elementarreaktion, 44 Elementarstrom, 25 Energiebilanz, siehe Enthalpiebilanz Enthalpiebilanz, 101, 111, 215, 272 ESM, 26, 28, 30, 31, 33, 194, 195 eval, 9 EXPUNIT2, 39, 76, 229 Faktorplan, 314, 359 orthogonaler, 316 FBR, 231 axiale Dispersion, 213, 239, 245 Randbedingungen, 199 symbolische Ltlsung, 241 Druckabfall, 235 instationarer , 2 13 Randbedingungen, 214 isothermer, 38, 191 mit Porendiffusion, 292, 371 periodische Strtlmungsumkehr, 249 radiale Dispersion, 214 mit Porendiffusion, 300 radiale Temperaturprofile
400 INDEX parabolische Ntiherung, 197, 233 SIMULINK-Modell, 234 zweidimensionales Modell, 220, 253, 263 zweiphasiges Modell, 272 FBRDAT, 231, 239 FBRKIN, 232 Fcn-Block, 88 Fehlerellipsoid Haupt komponenten , 307 kanonische Form, 307 FEMLAB, 24 Festbettreaktor, siehe FBR FIBEDAT, 253, 256 FIBEKIN, 257 Filmdiffusion, 377 Filmtheorie, 269 FIXBEDQ, 254 FLSM, 324 FLSMQN, 326 FOLGE- S I M 2 .C, 57 FOLGE-SIM3, 62 FOLGE.C, 55
~ 0 ~ c ~ 147 -1, Folgereaktion, 45 FOLGESF, 54 FOLGESY2, 54, 61 FOLGESY3, 62 FOLGESYS, 52 F T W , 206 FTW-DAT, 207 FVM, 11, 202, 215, 240, 253
Geschwindigkeitsgleichung, 7, 44 Gesetz kinetisches, siehe Geschwindigkeitsgleichung Gittersuche, 366 Gleichgewicht, 38-40,42, 78, 81, 129, 375 Berechnung flber Massenwirkungskinetik, 42, 131, 136, 227 Gleichgewichtskonstante, 41, 79 GLEICHU, 70 Gleichungen
stdchiometrische, 25,31,33,34, 36, 129, 193, 195, 196 Gleichungssysteme, algebraische, siehe AGls Grenzzyklus, 163 GUI, 42, 384 Help-Menti, siehe MATLAB-Hilfe Hessesche Matrix, 306 Hilbert-Matrix, 6 HJB-Methode, 310, 311, 353, 354 Impulsbilanz, 216 Integration numerische, 321 Interpolation, 73, 158 Interpretation, 2 IRAXOFUN, 240 IRAXAD, 247 IRAXADKI, 248 IRAXCTRL, 252 IRAXDAT, 245, 249 IRAXDATO, 242 IRAXIN, 250 IRAXISO, 241
IRAXZERO,
239, 242
Jacobi-Matrix, 105, 136, 307, 308, 314, 357 symbolische Berechnung, 285,314, 326 JACOBI-NULL.MAT, 263, 289, 296 Jacobi-Polynome, 261 Nullstellen, 261, 262 Knudsendiffusion, 274, 293 Kollokation, orthogonale, siehe OK Kollokationsmatrizen, 226, 262, 289 Komponentenvektor, 64, 69 Konfidenz, 317 Konfidenzbereich, 306, 325, 328 Konfidenzvolumen, 313 Kontinuitiitsgleichung, 192 KONTUR, 326 Konturenplot, 306, 326 Korrelationsmatrix, 307, 329
INDEX Kovarianzmatrix, 306, 325, 327 Kreislaufreaktor konzentrationsgeregelter,15,173 Labyrinthfaktor, 276 Legendre-Polynome, 261 Likelihood-Verhkiltnis, 316 LIMEX, 137 Linearkombination, 27 Linienmethode, siehe MOL MAPLE, 46 Massenwirkungskinetik, 42 , 44 MATLAB C Math Library, 23 MATLAB-Compiler, 23 MATLAB-Hilfe, 5 Matrix sparse, 12, 64, 84, 207, 219 st6chiometrische, 33,69,70,79, 80, 174, 194-196 tridiagonale, siehe nidiagonalMatrix zeilenreduzierte gestaffelte Form, 30, 33, 35, 37, 195 Mehrzielmethode, 208, 290, 309 Stiitzstellen, 208 Mehrzieloptimierung, 124 Menii, 383 MESH-Gleichungen, 177 M E Z I E L ~ ,290 MEZIEL2, 211, 290 Model1 datengetriebenes, 385 Modellaufbau, 314, 359 Modelldiskriminierung, 316, 365 Modellierung, 2 MODIABL, 368 M O D I L S ~ ,366 MODIPLO,
368
MOL, 219, 258 MOLDAT, 221 MOLKIN, 223 MOLKINSIM, 223
Netz neuronales, 385
401
NH3DIFF_AUS, 372 NHQFBRDAT, 373, 382 NHQFILMDX, 377 N H 3 G I T T E R , 379 NHQGL, 376
Nichtschltisselkomponenten, 27, 33, 68, 195 Nutzungsgrad, 289, 298 Oberflkiche, grafische, siehe GUI OK, 224, 261-263, 289, 294, 296 OKDAT, 263 OKKIN, 264 OKNULLSY, 262, 264, 296 OKRAND, 265 Optimieren, 3, 81, 341 Optimierung lineare, 174 ORTHKOL, 262, 264 PARABEL-LSQ2,
354
Parameterprtizisierung, 313, 356 Parameterschiitzung, 306 in DGls, 308, 309, 329 mit der Mehrzielmethode, 333 PDGls, 10, 202 lineare, 24 Pe-Zahl radiale, 215 PFRALLGDAT, 237 Phasendiagr amm , 167 Phasenebene, 162 Polymerisation, 123, 163 Polynom, 73 Polynome orthogonale, 224, 261 PORE-PROFIL, 291 POREFSOL, 289 Porendiffusion, 371, 377 P O R E P R O F , 290, 299 PORESTEU, 290 PORFBRST, 292 PORFUN, 290 PORLADGL, 295 PORLAKIN, 295 PORLAMB, 294
402 INDEX PORLASOL,
295
Quadratur, 224, 226 Randbedingungen, 203, 217, 220 Reaktion chemische, 31, 34 Reaktionskalorimeter, 111, 150 Tkainingssimulator, 113 Warmeproduktionsrate, 151 Auswertung, 321 Reaktionsmatrix, 7, 35, 36, 45, 64, 68, 70, 195 Reaktionsmechanismus, 34, 67 Regelung, 15, 120, 148, 151, 168 Regression, 306, 323, 371 Startwerte, 324, 376 RKLHELP, 120
S-function, 5 C MEX-file, 14, 55, 90, 177 level 1, 55 level 2, 17, 57 FORTRAN MEX-file, 137 M-file, 17, 54, 177 compilierte, 62, 177 S-Funktion, siehe S-function SBR, 101 optimale Dosierzeit, 154, 158 Schleife algebraische, 97 Schliisselkomponenten, 27, 29, 33, 37, 68, 192, 195 SchuBverfahren, 201, 236, 239 Semibatch Reaktor, siehe SBR Sensitivitatsgleichungen, 308, 331 set-param, 121 SETTEST, 237 SGM, 275, 293, 296, 380 Simulation, 2 SIMULINK Privatbibliothek, 183 Simulationsparameter, 52 SM-DGls, 271, 273, 282, 284 SM-Differenzengleichungen, 271,273, 281, 284
SM-Gleichungen, 269, 274 in Matrixform, 270 Speziesvektor, siehe Komponentenvektor StabilitatsBereiche CSTR, 170 Diagramm CSTR, 162 STAT, 76 Stationarittitsprinzip, 52 Staub-Gas-Modell, siehe SGM Stefan-Maxwell-Gleichungen, siehe SMGleichungen Stuchiometrie, 25, 191 Stofiilanz, 101, 215, 226 Stoffdatenbank, 42, 384 STOICH, 32, 34, 195 STOICH2, 35, 195
69 STOICH4, 69, 227 String-Matrix, 8, 70, 126 strings, siehe Zeichenkettenverarbeitung S t rbmung viskose, 275 structure array, siehe Verbund Subsystem, 114 Enabled, 184, 236 SYMIRAX, 241 SYNGA-GL, r9,82, 229 SYKGA-GL-KIN,229 SYNGADAT, 39 SYNGAFU2, 83 S Y N G A F U K , 82 S Y N G A K I N , 228 SYNGAODE, 228 Systemmatrix Eigenwerte, 162, 166 Systemtheorie, 4 STOICH3,
TABC-BEWERT, TABCFUN, 330
332
Thiele-Modul, 290 Toolbox CRT-Daten-, 42
INDEX 403 Neural Network, 385 reaktionskinetische, 326, 385 symbolische, 3, 241 Toolbox Chemometrics, 24 Database, 42 h z z y Logic, 24 NAG Foundation, 24 Optimization, 23 Partial Differential Equation, 24 Statistics, 24 Symbolic Math, 23, 46 Extended, 24 TOSTAGE-DAT-B, 106 ?tidiagonal-Matrix, 11, 205 TRPROF, 302
Vektorisierung, 6, 12 Verbund, 117 Versuchsplanung, 313 Volumenmethode, finite, siehe FVM
Ubertragungsfunkt ion diskrete, 16
XRPROF,
Variablen-Bus, 114 VARIALIS, 117 Variationsproblem, 4 Vektorindizierung von Matrizen, 8, 69
Wtirmebilanz, siehe Enthalpiebilanz W&rmeleitungsgleichung, 10, 17, 202, 258 WGL-ANAL, 259, 261 WGL-FVM, 260 WGL-FVM-DY, 14, 15 WGL-FVM - FCN -SY S. MDL, 15 WGL-FVM-KIN, 260 WGL-FVM-NL, 12, 13 WGL-SIM-SYS, 22 Wilson-Plot, 153 302
Zeichenkettenverarbeitung, 5, 7-9, 32, 68, 117, 126 zero crossing detection, 108, 109 Zustandsvariable diskrete, 136
Aus technischen Gründen bleibt diese Seite leer