Dies könnte für eine dritte, vierte, usw. Reaktionsebene mit der Erzeugung immer komplexerer Strukturen fortgeführt werden. Da die Produkte mit zunehmender Reaktionsebene in immer geringeren Mengen gebildet werden, wurde auf die Angabe weiterer Strukturen verzichtet.
... static vector<int> phase static int nedagrs=0; proc Tcl_rule {} { global irule op sub_op rule_trace global_name global k global attrib_1 center_1 rule_1 global rname rdate inphase phasepr phaseprop pcontacts in2gether global outphase kinmode startphase nedagrs switch $irule { GLOBAL { switch $op { INIT_RULES { # golbale Einstellungen set rname Dioxine1" set rdate 29.09.97" # Einstellungen der Phasen und Reaktoren # Inputphasen der Reaktoren set inphase(0) 0 # 2 Phasen im ersten Reaktor set phasepr {2,0} # Phasenmodi set phaseprop(0) $INERT" set phaseprop(1) $SURFACE" # Phasenkontakt 2 -> 1 set pcontacts(0) 2 set pcontacts(1) 1 set pcomtacts(2) 0 # alle Aggregate kommen zusammen den Reaktoren zugeteilt set in2gether(0) 1 # Ausgabephase set outphase 2 # Uebergabe der Variabeln an EROS7 putco input_phase_for_reactors inphase putco phases_per_reactor phasepr putco phase_property phaseprop putco phase_contacts pcontacts putco use_all_educts_together in2gether putco output_phase outphase # kinetische Einstellungen: keine Kinetik set kinmode(0) none # Erzeugung der Variable fuer die Startphase set startphase(0) 1 # Initialisierung des Aggregatzaehlers set nedagrs 0 # Uebergabe der Variablen an EROS7 putco kinetic_model kinmode put start_phase startphase } ...Während der Vorbehandlung der Ausgangsmaterialien werden diese den Phasen zugeteilt. Für den hier gezeigten Algorithmus darf in der Ausgangsdatei keine Verbindung mehrfach enthalten sein.
PREP_ROOT { prop E_N_AGGREGATES n for {set i 1} {$i <= $n} {incr i} { # chlorhaltig Aggregate kommen in die Phase 1, # alle übrigen in die Phase 2 set phs 2 set ncl [dioxin_agr_cl $i] if {$ncl > 0} {set phs 1} set startphase($nedagrs) $phs incr nedagrs } return OK }Zur Erweiterung, daß die Zuweisung zu den Phasen auch für mehrfach enthaltene Aggregate eingesetzt werden könnte, werden Ausgangsmaterialien, die schon einmal vorbehandelt wurden, ignoriert.
Die aufgerufene Prozedur dioxin_agr_cl zählt die Chloratome im angegebenen Aggregat und liefert sie als Funktionswert zurück. Sie ist Teil der Regeln:
proc dioxin_agr_cl {iagr} { # in der Variablen ncl werden die Chloratome gezaehlt. set ncl 0 prop E_LAST_ATOM il # Schleife ueber alle Atome im Ensemble for {set i 1} {$i <= $il} {incr i} { prop A_AGGREGATE $i ii if {$ii == $iagr} { # das Atom gehoert zum Aggregat, das betrachtet werden soll prop A_ELEMENT $i elem if {$elem == 17} {incr ncl} } } # Rueckgabe der Zahl der Chloratome im Aggregat $iagr return $ncl }Der einzige, benötigte Reaktionstyp ist die elektrophile aromatische Substitution, für die elementares Chlor als Reagens erforderlich ist. Die Phase zwei mit Kontakt zur Phase eins kombiniert nun alle ihre Substanzen, beginnend mit Dioxin, mit Chlor, das das einzige Molekül der Phase eins darstellt. Da auch die Produkte der Phase zwei zugeteilt werden, entstehen so in der Phase zwei neben Chlorwasserstoff in acht Reaktionsebenen nach und nach alle chlorierten Dioxine. Man erhält:
Berechnungszeit auf einer SparcStation 10/50 mit 32 MB in Min.:Sek.: 1:44 C++, 3:05 Tcl
Hier wurden jetzt alle chlorierten Dioxine zusammen erzeugt. Mit der gleichen Technik, die für die kombinatorische Chemie eingesetzt wird (siehe 7.1.7), können beispielsweise selektiv alle pentachlorierten Dioxine erzeugt werden. Dazu wird ein Reaktor mit den in Abbildung 180 gezeigten Phasen eingesetzt.
proc Tcl_rule {} { global irule op sub_op rule_trace global_name global name date sphase kin_mode nedagrs global phases_p_r phase_contacts phprop comp_edus in_phase ophase global attrib_1 center_1 rule_1 global phase_inc switch $irule { GLOBAL { switch $op { INIT_RULES { set name dioxin2.tcl" putco name name set date 30.09.1997" putco date date # reactors and phases set in_phase(0) 0 set comp_edus(0) 1 # 7 Phasen set phases_p_r {7,0} # Phasenkontakte set phase_contacts {2,1,3,1,4,1,5,1,6,1,0} # Phasenmodi set phprop(0) $INERT" set phprop(1) $SURFACE" set phprop(2) $SURFACE" set phprop(3) $SURFACE" set phprop(4) $SURFACE" set phprop(5) $SURFACE" set phprop(6) $INERT" putco phases_per_reactor phases_p_r putco phase_contacts phase_contacts putco phase_property phprop putco use_all_educts_together comp_edus putco input_phase_for_reactors in_phase set ophase 2 putco output_phase ophase set kin_mode(0) none putco kinetic_model kin_mode set sphase(0) 1 set nedagrs 0 put start_phase sphase return OK } ...Werden die Ausgangsmaterialien wie zuvor in die Phasen eins und zwei gegeben und die Produkte der Substitutionsreaktion gegenüber der Phase, die die Reaktion erzeugt, der jeweils um eins höheren Phase zugeteilt, sammeln sich die Dioxine mit der gleichen Anzahl an Chloratomen in je einer Phase, deren Strukturen dann ausgegeben werden.
FUNC { # Durchfuehrung der Reaktion ... set result_phase [expr $result_phase+1] return OK }Da bei jeder Substitutionsreaktion auch immer Chlorwasserstoff entsteht, enthalten die Phasen drei bis sieben auch diesen. Dieser kann während der Reaktion auch gelöscht werden, wodurch nur noch die pentachlorierten Dioxine in die Phase sieben gelangen (siehe Abbildung 181).