239
TASI GYULA egyetemi docens SZTE Alkalmazott és Környezeti Kémiai Tanszék SZÁMÍTÓGÉPES KÉMIA JATEPress Szeged 2010

Computational Chemistry

Embed Size (px)

DESCRIPTION

Coupled-cluster

Citation preview

Page 1: Computational Chemistry

TASI GYULA egyetemi docens

SZTE Alkalmazott és Környezeti Kémiai Tanszék

SZÁMÍTÓGÉPES KÉMIA

JATEPress Szeged 2010

Page 2: Computational Chemistry

Bírálók:

PÁLINKÓ ISTVÁN egyetemi docens

SZTE Szerves Kémiai Tanszék

BOGÁR FERENC tudományos főmunkatárs

SZTE Magyar Tudományos Akadémia Szupramolekuláris és Nanoszerkezetű

Anyagok Kutatócsoport CSONTOS JÓZSEF

tudományos főmunkatárs BME Fizikai Kémiai Tanszék

Borítóterv:

SZŐNYI ETELKA

ISBN 978-XXX-XXX-XXX-X

Minden jog fenntartva. Jelen könyvet, illetve annak részeit tilos reprodukálni,

adatrögzítő rendszerben tárolni, bármilyen formában, vagy eszközzel

– elektronikus, mechanikus, fényképészeti úton – vagy más módon közölni a kiadó engedélye nélkül.

Page 3: Computational Chemistry

3

Tartalom

Előszó................................................................................................................................5

Néhány alapvető és származtatott fizikai állandó.............................................................8

A könyvben használt fontosabb rövidítések és jelölések..................................................9

Bevezetés a személyi számítógépek világába.................................................................10

1. Atomi DESCARTES-koordináták előállítása molekuláris Z-mátrixból....................21

2. Forgatások és tükrözések a 3-dimenziós térben.....................................................29

3. Szimmetrikus mátrixok diagonalizációja JACOBI módszerével .............................35

4. A HÜCKEL-féle molekulapálya (HMO) módszer és módosításai ..........................49

5. Molekulák tehetetlenségi tenzora ..........................................................................71

6. Molekulák szimmetriájának számítógépes meghatározása ...................................77

7. Transzcendens és nemlineáris egyenletek számítógépes megoldása.....................87

8. Neutralizációs titrálási görbék számítógépes szimulációja....................................95

9. Jelsorozatok számítógépes feldolgozása..............................................................101

10. A “pontok a gömbön” probléma megoldása minimalizálással ............................109

11. Görbék illesztése mérési adatokra: lineáris és nemlineáris regresszió ................126

12. Molekulák szerkezetének meghatározása ............................................................148

13. Véletlenszámok és Monte-Carlo számítások .......................................................178

14. A HARTREE-FOCK-féle önkonzisztens tér (HF SCF) módszer.............................196

15. Atomi töltések számítása elektrosztatikus potenciáltérképekből.........................217

Page 4: Computational Chemistry
Page 5: Computational Chemistry

Tasi Gyula: Számítógépes kémia

5

Előszó

A tudomány matematika és számítástechnika nélkül ma már elképzelhetetlen. A számító-gépközpontok által készített statisztikai tanulmányok szerint a kémikusok voltak a legjelen-tősebb számítógép-felhasználók a XX. században. A kémiai problémák közül is elsősorban a molekulamodellezési számítások igényeltek különösen nagy számítási gépidőt, memóriát és egyéb tárolókapacitást.

Az 1950-es és az 1960-as években azonban mind a számítástudományt (Eng. computer science), mind a kvantumkémiát (Eng. quantum chemistry) finoman szólva szkepticiz-mussal tekintette a tudóstársadalom. A tudósok nem tudták, s valószínűleg nem is akarták elhinni, hogy a számítógép egyszer ugyanolyan komoly kutatási eszközzé válhat, mint bármely spektroszkópiai mérőműszer.

NEUMANN János (John von Neumann, Johann von Neumann, magyar származású amerikai matematikus, 1903-1957) elévülhetetlen érdemeket szerzett a modern számítógép és a modern számítástechnika megteremtésében.

A számítástudományban elért eredményeiről William ASPRAY készített egy hiteles összefog-laló munkát: John von Neumann and the Origins of Modern Computing, MIT (1990). A mű magyarul is megjelent: Neumann János és a modern számítástechnika kezdetei, Vince Kiadó, Budapest (2004). NEUMANN sokak szerint kora legnagyobb matematikusa volt.

A XX. század első felében elméleti kémia (Eng. theoretical chemistry) alatt a “papír és ceruza” (Eng. paper and pencil) kémiát értették. Ez a tudományág volt hivatott egyszerű megfontolások alapján értelmezni a kémiai átalakulásokat. Napjainkban az elméleti kémia már több tudományágból épül fel: matematikai kémia (Eng. mathematical chemistry), kvantumkémia, számítógépes kémia (Eng. computational chemistry) és informatikai kémia (Eng. chemoinformatics). Ezek között is van azonban átfedés. Az eredeti “papír és ceruza” tulajdonságot a matematikai kémia tartotta meg leginkább. Meg kell azt is említenünk, hogy a fenti tudományágak is összetettek. Például a biokémiai szempontból is nagy jelentőségű sztereokémia (Eng. stereochemistry) egyaránt tartozik a matematikai kémiához és a számí-tógépes kémiához. A gyógyszermolekulák számítógépes tervezésével foglalkozó tudományág (Eng. computer-aided drug design) pedig a számítógépes és az informatikai kémia része.

A számítógépek iránti igényt implicite már Paul Adrien Maurice DIRAC (1902-1984) angol fizikus a kvantummechanika egyik megalkotója megfogalmazta egy 1929-es cikkében [P.A.M. Dirac, Proc. Roy. Soc. (London), 123, 714 (1929)]:

“Napjainkban tökéletesen ismertek mindazok a törvények, amelyek a fizika nagy része és az egész kémia

matematikai elméletének a megalkotásához szükségesek. Az egyedüli nehézség abban rejlik, hogy ezeknek a

törvényeknek az egzakt alkalmazása olyan bonyolult egyenletekhez vezet, melyek megoldása jelenleg szinte

reménytelen.”

Szigorú értelemben ez azt jelenti, hogy a fizikai és a kémiai problémák nagy része az alkalmazott matematika tárgykörébe tartozik. Természetesen az akkori mechanikus számító-gépek nem voltak alkalmasak a kérdéses egyenletek megoldására.

Page 6: Computational Chemistry

Tasi Gyula: Számítógépes kémia

6

Napjainkban ez a helyzet jelentősen megváltozott: az utóbbi két évtizedben a számí-tástechnika óriási fejlődésen ment keresztül. Ezzel kapcsolatban érdemes megemlíteni egy, a Journal of Chemical Education folyóiratban megjelent cikket [P.S. Poskozim, Computer Speed and Avogadro’s Number, J. Chem. Educ., 85, 634 (2008)]. Ebből kiderül, hogy napjaink legjobb IBM számítógépe kb. 44000-szer gyorsabb, mint az 1986-os év egyik leg-jobb szuperszámítógépe, a CRAY-S1.

A számítógépes kémia jelentőségének növekedését az utóbbi évtizedekben mindennél jobban mutatja, hogy John Anthony POPLE (1925-2004) 1998-ban kémiai Nobel-díjat kapott Walter KOHN-nal megosztva “új számítógépes módszerek kifejlesztéséért a kvantum-kémiában”.

POPLE és munkatársai az 1960-as években kezdték el fejleszteni a GAUSSIAN programcso-magot, amit napjainkban nagyon sok szakember használ mindennapi kutatómunkája során.

Jelen mű bevezetést kíván nyújtani a számítógépes kémiába. A szükséges elméleti alapo-kat egy korábbi könyv tartalmazza (Tasi Gyula: Matematikai kémia, JATEPress, Szeged, 2009). Erre a könyvre gyakran fogunk hivatkozni (MK: X.-Y.Z.) formában.

A konkrét programozást általában FORTRAN nyelven végezzük. Ezt egyrészt a hagyo-mányok tisztelete miatt tesszük, másrészt pedig azért, mivel a modern FORTRAN programo-zási nyelv egyáltalán nem szegényesebb a többi programozási nyelvnél. A FORTRAN nyelven írt programok “olvasása” általában igen egyszerű, s az olvasó lépésről-lépésre, egyre több tapasztalatra szert téve, végül önállóan is tud majd programokat, eljárásokat írni. Nem törekszünk a legmodernebb FORTRAN nyelvek (FORTRAN 95 és 2003) használatára. Sőt, a lehető legegyszerűbb FORTRAN “dialektust” használjuk. A legfőbb szempontunk az, hogy a forráskódok szintaktikailag és szemantikailag helyesek legyenek. Ez azt jelenti, hogy megfe-leljenek a FORTRAN nyelv szabályainak, és pontosan azt tegyék, amit szeretnénk. Szeren-csére, a modernebb FORTRAN nyelvek “visszafelé” kompatibilisek, azaz “megértik” a régebbi verziókat is. Ha az olvasó eléggé motivált, akkor egy kis munkával elegánsabbá, kompaktabbá teheti a közölt forráskódokat.

Egy magára valamit is adó program azonban sohasem készül el: csak időhiányában (ideig-lenesen) felfüggesztjük a fejlesztését.

A FORTRAN mellett általában a MATHEMATICA szimbólikus matematikai programcso-magot fogjuk használni. Ezzel ugyanis a számítási eredményeket grafikusan is könnyen meg tudjuk jeleníteni.

Az érdeklődő hallgatóknak további cikkek és könyvek tanulmányozását is javasoljuk. A továbblépéshez nagyszerű cikkek találhatók a Journal of Chemical Education (J. Chem. Educ.), a Computer Journal (Computer J.), a Journal of Computational Chemistry (J. Comput. Chem.), a Computer Physics Communications (Comput. Phys. Commun.) és a Journal of Computational Physics (J. Comput. Phys.) folyóiratokban. A Computer Physics Communications folyóirathoz egy számítógépes könyvtár is tartozik, amelyben nagyon sok tudományos program található forráskód formájában. Nem meglepő módon a programok

Page 7: Computational Chemistry

Tasi Gyula: Számítógépes kémia

7

döntő része FORTRAN nyelven íródott. Érdemes meglátogatni a Science Direct honlapját a kérdéses programkönyvtár megtekintése végett.

Sok barát, kolléga és tanítvány segített emelni a könyv színvonalát. Különösen hálás vagyok Bogár Ferenc, Csontos József és Pálinkó István tanár uraknak, valamint Barna Dóra és Nagy Balázs doktoranduszoknak. Alaposak voltak a kézirat átnézésében, és őszintén megmondták a véleményüket. Hálával tartozom Roman M. Balabin-nek is, aki önzetlenül elküldte a n-butánra és a n-pentánra vonatkozó pontos Raman-spektroszkópiai mérési ered-ményeit. A könyvben kiértékelt további mérési eredmények kémiai BSc hallgatók lelkes kísérleti munkáját dicsérik.

Szeged, 2010. Tasi Gyula

Page 8: Computational Chemistry

Tasi Gyula: Számítógépes kémia

8

Néhány alapvető és származtatott fizikai állandó

Az állandók P.J. MOHR, B.N. TAYLOR és D.B. NEWELL cikkéből származnak: “CODATA Recommended Values of the Fundamental Physical Constants: 2006”, J. Phys. Chem. Ref. Data, 37(3), 1187-1284 (2008) (http://physics.nist.gov/constants). Értéküket a legkisebb négyzetek módszere alapján végzett illesztéssel határozták meg. Az illesztés jóságára jellemző statisztikai adatok a kérdéses cikkben megtalálhatók.

Mennyiség Szimbólum Érték Dimenzió

A fény sebessége vákuumban c 299792458 m s1 A vákuum permeábilitása 0 4 107 N A2 A vákuum permittivitása 0 2

01 c F m1 Planck-féle állandó h 6.62606896 1034 J s h2 1.054571628 1034 J s Elemi töltés e 1.602176487 1019 C A proton tömege mp 1.672621637 1027

1.00727646677 kg

amu Az elektron tömege me 9.10938215 1031 kg A neutron tömege mn 1.674927211 1027

1.00866491597 kg

amu Proton-elektron tömeghányados

mpme 1836.15267247

Neutron-elektron tömeghányados

mpme 1838.6836605

Bohr-rádiusz a0 0.52917720859 1010 m Hartree-energia Eh 4.35974394 1018

27.21138386 J

eV Avogadro-állandó NA 6.02214179 1023 mol1 Atomi tömegegység

12( ) /12um m C u, mu, amu 1.660538782 1027 kg

Moláris gázállandó R 8.314472 J mol1 K1 Boltzmann-állandó, RNA k 1.3806504 1023 J K1

Konverziós faktorok

1 eV = 23.06055 kcal mol1 = 96.48534 kJ mol1 = 8065.545 cm-1 1 Eh = 627.5095 kcal mol1 = 2625.500 kJ mol1 = 27.21138386 eV 1 Bohr-elektron = 2.541747 Debye 1 cal = 4.184 J

Atomi egységek (Eng. atomic units, a.u.)

A kvantumkémiai számításokban ún. atomi egységeket használunk. Atomi egységek használatára úgy térhetünk át, ha feltesszük, hogy 04 1em és 1.e Ezek következménye például hogy 0 1.ha E Az idő atomi egysége: 0 .hE A sebesség atomi egysége: 0 0 0 .v a Így a fénysebesség atomi egységben: 0 0 137.036.c c v

Page 9: Computational Chemistry

Tasi Gyula: Számítógépes kémia

9

A könyvben használt fontosabb rövidítések és jelölések

PC: személyi számítógép, Personal Computer RAM: dinamikus memória, Random Access Memory CPU: processzor, Central Processing Unit GPU: grafikus processzor, Graphics Processing Unit HDD: merevlemezes tároló, Hard Disk Drive OS: operációs rendszer, Operating System DOS: operációs rendszer, Disk Operating System UNIX: C nyelven írt operációs rendszer LINUX: operációs rendszer, Linus TORVALDS + Unix ML: gépi nyelv, Machine Language ASM: assembly nyelv, Assembly Language FORTRAN: programozási nyelv, Formula Translation OpenMP: paralel programozási környezet MATHEMATICA: a Wolfram cég védjegye LCAO: atompályák lineáris kombinációja, Linear Combination of Atomic Orbitals AO: atompálya, Atomic Orbital MO: molekulapálya, Molecular Orbital HMO: HÜCKEL-féle MO (módszer) EHT: Kiterjesztett HÜCKEL-féle MO (módszer), Extended Hückel Theory HF, HFRH: HARTREE-FOCK, HARTREE-FOCK-ROOTHAAN-HALL (módszer) HFRH SCF: HFRH Self-Consistent Field HOMO: Highest Occupied MO ASED: Atom Superposition and Electron Delocalization SEOEM: Scaled Effective One-Electron Method SEHMO: Scaled Extended Hückel MO AM1: Austin Model 1 PAS: Principal Inertial Axis System PES: Potential Energy Hypersurface CPES: Conformatioanl Potential Energy Hypersurface POS: Points on a Spehere LS: lekisebb négyzetek (módszere), Least-Squares BFGS: BROYDEN-FLETCHER-GOLDFARB-SHANNO (módszer) DIIS: Direct Inversion in the Iterative Subspace VSEPR: Valence Shell Electron Pair Repulsion STF; Slater-type function STO; Slater-type orbital GTF: Gaussian-type function GTO: Gaussian-type orbital CGTO: contracted GTO DGB: Distributed Gaussian Basis MEP: Molecular Electrostatic Potential

Page 10: Computational Chemistry

Tasi Gyula: Számítógépes kémia

10

Bevezetés a személyi számítógépek világába A valós életben előforduló problémák nagy része nem oldható meg analitikusan: közelítő

numerikus módszereket kell alkalmaznunk. A numerikus módszerek alkalmazásához pedig egyrészt számítógép (Eng. computer), másrészt megfelelő alkalmazási (felhasználói) program kell. A következőkben csak Intel és AMD processzorokat tartalmazó személyi számí-tógépekkel (PC, Eng. personal computer) foglalkozunk, mivel ezeknek a számítógépeknek a legjobb a teljesítmény-ár mutatójuk. A PC-k kialakulásával és fejlődésével számos kitűnő könyv foglalkozik. Itt csak kettőt említünk meg közülük: M.S. Malone, The Microprocessor: A Biography, Springer-Verlag, New York (1995) és K.R. Irvine, Assembly Language for Intel-Based Computers, Prentice-Hall International (UK) Limited, London (1999).

Az Intel cég napjaink egyik legsikeresebb vállalata. Ki gondolná, hogy a cég alapításában két magyar származású szakember is részt vett? Az egyik közülük eredetileg vegyészmérnök: Andrew GROVE (Gróf András, 1936-). Az Intel vállalatot 1968-ban alapította Gordon MOORE, Robert NOYCE, Andrew GROVE és VADÁSZ László. Andrew GROVE lett a vállalat első alkalmazottja, majd elnöke (1979) és később vezérigazgatója (1987). A nehéz kezdet után az Intel ma már az USA egyik legnagyobb vállalata. A hatékony Intel-processzorok (80286, 80386, 80486, PII, PIII, PIV, Core Duo, Core Quad, stb.) kifejlesztése elenged-hetetlenül szükséges volt a modern PC-k létrehozása szempontjából. Az első Intel-pro-cesszort (8088) tartalmazó IBM PC 1980 körül jelent meg.

Az Eötvös Lóránd Fizikai Társulat 2002-ben kiadta Andrew GROVE önéletrajzi regényét [Andrew S. Grove: Swimming across: a memoir, Warner Books, New York (2001)] magya-rul: Átúsztam: A mikroprocesszor alkotójának önéletrajza magyarországi éveiről. Henry KISSINGER a következőket írta a regényről: “Megrendítő önéletrajz. Megható emlékeztetés arra, hogy mi Amerika. Belevaló bátor férfiról szól, aki Amerika egyik tündökletes siker-történetét csinálta.”

A számítógép fizikai alkatrészeinek összességét hardvernek (Eng. hardware) nevezzük. A hardver legfontosabb komponensei a következők:

Az alaplap (Eng. motherboard) a számítógép szíve. Tulajdonképpen egy integrált áram-körökből álló lap, mely foglalatokat tartalmaz a processzor, a memória modulok és egyéb bővítő kártyák (videókártya, hangkártya, hálózati kártya, stb.) számára. Konnektorok segít-ségével csatlakoztathatók hozzá az input-output egységek (billentyűzet, monitor, egér, háttér-tárolók, lemezmeghajtók, szkenner, nyomtató, stb.) és az elektromos áramforrás. A külön-böző komponensek ún. buszon (Eng. bus) keresztül vannak kapcsolatban egymással. A busz nem más, mint huzalok összessége, melyek bele vannak nyomtatva az alaplapba. Az eredeti IBM PC-ben 8 bites busz szállította az adatokat a processzor és a többi komponens között. Ez az Intel 8088-as processzornak még megfelelő volt. Ahogy azonban a processzorok egyre gyorsabbak lettek, a busznak is fejlődnie kellett: először 16, később 32, majd 64 bites buszok jelentek meg.

A dinamikus memória (RAM, Eng. main memory, random access memory) tartalmazza a végrehajtható (bináris) programkódot és az adatokat, amikor egy program fut. Napjainkban a legtöbb PC 1-24 GByte (1 byte = 8 bit) RAM-mal rendelkezik.

Page 11: Computational Chemistry

Tasi Gyula: Számítógépes kémia

11

A számítógép agya a processzor (CPU, Eng. central processing unit). Speciális alaplapok több processzor befogadására is képesek. A duál processzoros alaplapok például két processzort tartalmaznak, melyek képesek szimultán és szimmetrikusan működni. A processzor tároló egységei (regiszterei, Eng. registers) 8, 16, 32, 64 és 128 bitesek lehetnek (IA8, IA16, IA32, IA64 és AMD64 CPU-k). Ezek a regiszterek sokkal gyorsabban hozzáférhetők, mint az előzőekben bemutatott RAM, így a konkrét számítások során ezeket használjuk. Kezdetben a processzorok skaláris processzorok voltak, azaz a regiszterekbe a számadatok egymásután kerültek, s egyszerre csak egyen hajtottak végre egy adott műveletet. Napjaink Intel és AMD processzorai már vektoriálisak: egyszerre több számadat kerül a regiszterekbe, melyeken szimultán hajtanak végre egy adott műveletet. Újabban grafikus kártyákat is alkalmaznak számítások végzésére (GPU, Eng. graphics processing unit).

Nagy fájlok tárolására merevlemezes tárolókat (HDD, Eng. hard disk drive) használunk. Ezek kapacitása akár a memória kapacitásának az ezerszerese is lehet. Ha valaki kedvet érez hozzá, alkatrészekből saját PC-jét is felépítheti: M. Rosenthal, Build Your Own PC, McGraw-Hill, New York (1999).

Valószínűleg a számítógépeinkben hamarosan nem lesznek mechanikus alkatrészek. Nem lesz külön memória és merevlemezes tároló: egy összefüggő optikai memóriánk lesz, amiben mindent (programokat, adatokat, stb.) kényelmesen tárolhatunk.

A hardver és a felhasználói programok (szoftver, Eng. software) közé ékelődik az ún. operációs rendszer (OS, Eng. operating system), melynek elsődleges feladata a számítógép komponenseinek a működtetése. A felhasználói programok általában az operációs rendszeren keresztül érik el, és használják a különböző komponenseket. Az első IBM PC-k a Microsoft cég által kifejlesztett DOS operációs rendszerrel (Eng. disk operating system) rendelkeztek.

A DOS operációs rendszer előnye, hogy használata igen egyszerű és gyorsan megtanulható. Hátránya viszont az, hogy egyszerre csak egy személynek engedi meg a számítógép haszná-latát, és az is csak egy programot (feladatot, Eng. job) futtathat.

Kezdetben a DOS csak 640 KByte memóriát engedélyezett a felhasználói programok számára. A későbbiekben megjelent DOS-bővítők (Eng. DOS extenders) azonban ezt a korlá-tot megszüntették, s akár 64 MByte memória is hozzáférhetővé vált. A DOS tulajdonképpen egy nagyon leegyszerűsített UNIX operációs rendszer, így nem meglepő, hogy a későb-biekben megpróbáltak egy valódi UNIX operációs rendszert is kifejleszteni PC-re (lásd később). A Microsoft cég is megpróbált túllépni a DOS korlátain létrehozva a WINDOWS operációs rendszerek sorozatát: 95, NT, 98, ME, XP, Vista, Windows 7 stb.

A UNIX operációs rendszer prototípusát az 1970-es években fejlesztették ki tudományos és professzionális felhasználók egyrészt az AT&T Bell laboratóriumában (a legutolsó verzió System V Release 4), másrészt Berkley-ben a Kalifornia Egyetemen (a legutolsó verzió BSD 4.4). Napjainkban a UNIX operációs rendszer nagyon sok változatával találkozhatunk. A kereskedelmi forgalomban kapható verziók (SunOS, Solaris, SCO UNIX, AIX, HP/UX, UNICOS, ULTRIX, stb.) ára általában igen borsos. Különösen, ha meggondoljuk, hogy az

Page 12: Computational Chemistry

Tasi Gyula: Számítógépes kémia

12

operációs rendszeren túl egy szoftverfejlesztő környezetre (programszerkesztő, fordító programok, stb.) is szükségünk van a munkához.

A UNIX egy sokfelhasználós (Eng. multiuser) és sokfeladatos (Eng. multitasking) operációs rendszer.

Ez azt jelenti, hogy egy UNIX operációs rendszerrel rendelkező számítógépen egyszerre többen dolgozhatnak, s mindenki több feladatot is futtathat. A UNIX operációs rendszer használatának alapjait például a következő könyvből sajátíthatjuk el: J. Peek, G. Todino, J. Strang, Learning the UNIX Operating System, 4th edition, O’Reilly & Associates (1998). Az operációs rendszereket kezdetben gépi és assembly nyelven írták. A UNIX volt az első olyan operációs rendszer, melynek megírására egy magas szintű programozási nyelvet (C nyelv) használtak. A UNIX operációs rendszerrel kapcsolatban igen sok cikk jelent meg a szak-irodalomban. A következő cikk egy – mindenki számára érthető általános áttekintést nyújt: V. Meyer, W. Meyer: The UNIX Timesharing Operating System, Computer Physics Communications, 50, 51 (1988).

Linus TORVALDS egyetemi hallgató volt 1991-ben Finnországban, amikor Intel 80386-os processzorra programokat szándékozott írni. Nagyon hamar rádöbbent azonban arra, hogy a DOS nem felel meg a céljainak, és a MINIX operációs rendszerre építve megpróbált létre-hozni egy UNIX típusú “szabad” operációs rendszert. A “szabad” szó itt azt jelenti, hogy a kérdéses operációs rendszert mindenki szabadon fejlesztheti, azaz a C nyelvű forráskód mindenki számára hozzáférhető. A kifejlesztett operációs rendszernek TORVALDS a LINUX nevet adta. Meg kell azonban jegyezni, hogy TORVALDS tulajdonképpen a jelenlegi LINUX operációs rendszer magját (Eng. kernel) hozta létre: a többi alkotórész (pl. programszer-kesztő, fordító programok, stb.) a Free Software Foundation által támogatott GNU projekt munkájának az eredménye. Napjainkban – az internet révén igen sokan bekapcsolódtak a LINUX fejlesztésébe, s komplett LINUX fejlesztői rendszereket hoznak forgalomba: Fedora, SuSE, Debian, stb. Az interneten könnyen megtalálhatók ezek a disztribúciók.

A LINUX operációs rendszerre általában nagy stabilitás és biztonság jellemző, így ez a legmegfelelőbb operációs rendszer a személyi számítógépünkre, ha komolyabb számításokat szeretnénk végezni.

A számítógépen futó felhasználói programot valamilyen módon el kell készítenünk. A legkomolyabb kihívás a gépi nyelven (ML, Eng. machine language) vagy az assembly nyelven (ASM, Eng. assembly language) való programozás. Ezek ún. alacsony szintű programnyelvek (LLL, Eng. low-level languages), mivel közvetlenül a processzorok regisz-tereivel dolgoznak. Ennek megfelelően hátrányuk, hogy processzor-függők. Segítségükkel azonban igen tömör és gyors programokat lehet írni.

A programozók többsége – kényelmi szempontok miatt általában valamilyen magas szintű programozási nyelvet (HLL, Eng. high-level language) igyekszik használni. Ilyenek például a BASIC, a FORTRAN, a C, a PASCAL, stb. Ezek a nyelvek saját szabályokkal rendelkeznek, melyek viszonylag könnyen elsajátíthatók. A kiválasztott nyelven megírt ún. forráskódot (Eng. source code) egy fordító program (Eng. compiler) fordítja le a számító-

Page 13: Computational Chemistry

Tasi Gyula: Számítógépes kémia

13

gépen közvetlenül futtatható gépi (bináris) kódra. A számítógépes kémiában általában FORTRAN nyelven programozunk. Például a GAUSSIAN kvantumkémiai program fejlesztése alapvetően FORTRAN 77 nyelven történik. A második leggyakrabban használt programnyelv a C. A FORTRAN és a C nyelvek alapszintű ismerete elégséges a könyvünk-ben bemutatott forráskódok “olvasásához”. Meg kell azonban jegyeznünk, hogy a forrás-kódok “írása” ezzel szemben sokkal nehezebb feladat. Esetleg az olvasó korábban már használt BASIC vagy PASCAL nyelvet, s kellő programozási gyakorlattal is rendelkezik. Ez ugyanis nagymértékben elősegíti egy harmadik vagy egy még további programnyelv gyors elsajátítását. A FORTRAN programnyelvvel kapcsolatban érdemes megemlíteni A. PERLIS allegorikus szavait:

“FORTRAN is not a flower, but a weed. It is hardy, occasionally blooms, and grows in every computer. = A FORTRAN nem virág, hanem gyom. Évelő, ritkán virágzik, s minden számítógépen megterem.”

John G. KEMENY (Kemény János György, 1926-1992, magyar származású amerikai mate-matikus) a BASIC nyelv egyik megteremtője. A Robert OPPENHEIMER által vezetett Institute for Advanced Studies intézetben Albert EINSTEIN asszisztense volt 1949 és 1951 között. KEMÉNY János kapta meg az IBM első ROBINSON-díját 1991-ben az első számítógéphálózat 1960-as évekbeli létrehozásáért. KEMÉNY 1956-os Bevezetés a diszkrét matematikába című könyve [Kemeny, J., Snell, J.L., and Thomson, G.L.: Introduction to finite mathematics, Prentice-Hall, Englewood Cliffs, 3rd edition (1974)] forradalmasította a matematika oktatá-sát.

KEMENY szerint az emberiségnek harmonikus szimbiózist kell kialakítania a számítógépek-kel. Mind a tudomány, mind a társadalom fejlődésének sikere nagymértékben függ ennek a szimbiózisnak a sikerétől.

Jelen szerző a FORTRAN 66 (más néven FORTRAN IV) nyelvvel ismerkedett meg először, majd a BASIC nyelv különböző változatai és a C nyelv következtek. A hőskorban aktatáskában, vagy nejlontáskában cipeltük a programunkat – lyukkártyák formájában a számítógépközpontokba futtatni. Azóta szemtanúi lehettünk a FORTRAN nyelv hihetetlen fejlődésének (77, 90, 95 és 2003), valamint a C és a C++ nyelvek létrejöttének.

Érdemes a programjainkat struktúráltan írni. Ez a “struktúrált programozás” (Eng. structured programming) egy programozási stílust jelöl, ami megfelelő bekezdések alkalma-zásával világossá teszi a program menetét. A FORTRAN nyelv használata esetén lehetőleg kerüljük a cimkék használatát és a kódban való ide-oda ugrálásokat, azaz a GOTO utasításo-kat. Ezek ugyanis áttekinthetetlenné teszik programjainkat. Ne felejtsük el kellő számú meg-jegyzéssel is ellátni a kódunkat. A megjegyzések ugyanis nagy segítséget jelenthetnek ne-künk és másoknak, ha a későbbiekben szükség adódik a kód módosítására. Az ajánlott iroda-lomban több könyvet is felsorolunk, amik hasznosak lehetnek a FORTRAN és a C programo-zási nyelvek elsajátításában. M. METCALF nevét azonban feltétlenül meg kell említenünk: több könyvet és cikket írt a FORTRAN nyelv hatékony használatáról és fejlődéséről. A FORTRAN 90 nyelv kialakulásával foglalkozik például a következő cikke: M. Metcalf, FORTRAN 8X – The Emerging Standard, Computer Physics Communications, 45, 259 (1987).

Page 14: Computational Chemistry

Tasi Gyula: Számítógépes kémia

14

A könyvünkben bemutatott FORTRAN és C forráskódok LINUX alatt a GNU, az Intel és a Portland Group fordító programjai segítségével könnyen lefordíthatók. WINDOWS alatt az Intel, a Microsoft, a Portland Group és a Compaq cégek FORTRAN és C fordítói egyaránt megfelelők. Itt kell megemlítenünk a University of Salford WINDOWS alatt futó FORTRAN 77-es és FORTRAN 95-ös fordítóját is. A fordítók ún. “personal edition” változata ingyen letölthető az internetről.

Egy komolyabb FORTRAN program készítésének főbb fázisai a következők:

(1) Először is alaposan tanulmányoznunk kell a problémát, amit meg szeretnénk oldani. Ez magában foglalja a részletes irodalmazást is. Nem szabad a szakirodalom alapos ismerete, az előzmények ismerete nélkül egy komolyabb program tervezéséhez és megvalósításához hozzákezdeni;

(2) A programtervezési fázisban ki kell választanunk a megfelelő algoritmusokat, numerikus módszereket, és fel kell írnunk a program folyamatábráját;

(3) Ezután egy megfelelő programszerkesztő (szövegszerkesztő) segítségével elkészítjük a program forráskódját. Például a vi(m) editort egyaránt használhatjuk WINDOWS, LINUX és egyéb UNIX operációs rendszerek alatt. (A program az internetről ingyen letölthető.) A vi megtanulása fáradságos, de igen sokat tud, s ha már megszoktuk, nehezen tudunk lemondani róla. A következő könyv teljes részletességgel tárgyalja a vi editor használatát: L. Lamb, A. Robbins, Learning the vi editor, O’Reilly & Associates, 1998. Szükség esetén azonban közönséges szövegszerkesztő is alkalmazható, de arra ügyelnünk kell, hogy speciális karak-terek ne kerüljenek a forráskódba mentéskor;

(4) A forráskódot dokumentálnunk kell, hogy a felhasználók és az esetleges fejlesztők ponto-san tudják, hogy hol mi történik a kódban. A megjegyzéseket lehetőleg angolul írjuk be a forráskódba, mivel az ASCII karakterektől eltérő karakterek problémát okozhatnak (Ne használjunk ékezetes betűket!) A dokumentálás fontosságát általában nem veszik komolyan a programfejlesztők, s ez a későbbiekben nagyon megnehezítheti a program karbantartását, fej-lesztését;

(5) Ezután következik a program első fordítása és tesztelése. Ez a fázis addig tart, amíg hibát tapasztalunk. A tesztelés eredményeként egy szintaktikailag és szemantikailag korrekt forrás-kódot kapunk. A szintaktikai helyesség azt jelenti, hogy a forráskód eleget tesz a FORTRAN nyelv szabályainak. A szemantikailag helyes program pedig pontosan azt az eredményt adja, amit várunk tőle, azaz helyesen működik;

(6) Általában a tesztelési fázis végén kapott kód nem optimális a felhasználás szempontjából. Az utolsó fázisban készítjük el programunk valamilyen szempontból optimalizált változatát. Ilyen szempontok lehetnek például a minél rövidebb futási idő, a minél kisebb memória-felhasználás, az esetleges parallelizálás stb.

Készítsük el a vázolt programfejlesztés egyszerűsített folyamatábráját! Programok folyamat-ábráinak az elkészítésekor is hasonló módon kell eljárnunk. Az algoritmikus gondolko-dásmód kifejlesztése érdekében érdemes lépésekre bontanunk programjainkat.

Page 15: Computational Chemistry

Tasi Gyula: Számítógépes kémia

15

A forráskód írása

A kód fordítása

Hibák? Igen

Linkelés

Könyvtári eljárások

Egyéb eljárások

Hibák?

Nem

Igen

A program futtatása

Jól működik?

Igen

Kész

Nem

Nem

Page 16: Computational Chemistry

Tasi Gyula: Számítógépes kémia

16

Az igen egyszerű “Hello World!” program elkészítésekor természetesen nem kell ilyen körülményesen eljárnunk:

c*********************************************************************** program main c*********************************************************************** write(*,*) ’Hello World!’ end c***********************************************************************

Általában ez az első program, amit egy új programozási nyelv tanulásakor készítünk. A “Hello World!” szöveg a program futtatásakor a képernyőn jelenik meg. Ez a write utasításban szereplő első csillag következménye. A második csillag arra ad utasítást, hogy ne foglalkozzon a rendszer a kiírandó adatok (jelen esetben szöveg) formatálásával. Látható, hogy az első hat oszlopba nem írunk kódot. A 6. oszlop a folytató oszlop. Ha ide karakter kerül, akkor a kérdéses sor az előző folytatása. Az első öt oszlopba kerülhetnek az esetleges GOTO utasítások cimkéi. Ha azt szeretnénk, hogy a fordítóprogram ne vegyen figyelembe egy sort, akkor az első oszlopba c betűt (Eng. comment) vagy csillagot írunk. Így tudunk megjegyzéseket írni a programunkba. Fontos még az is, hogy alapértelmezésben csak az első 72 oszlopot használhatjuk a kód írásakor: a 73. oszloptól kezdődően a beírt karaktereket már nem értelmezi a fordítóprogram.

Tekintsünk most egy kicsit komolyabb példát! A következő program egy általunk mega-dott rádiuszú kör kerületét és területét számítja és írja ki a képernyőre:

************************************************************************ program main ************************************************************************ * Program CIRC calculates the circumference and area of a circle. * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) data pi/0.d0/ save pi if(pi.eq.0.d0) call get_pi(pi) write(*,'(a)') 'Enter radius = ' read(*,*) radius if(radius.lt.0.01d0.or.radius.gt.50.d0) & stop 'Allowed interval: 0.01 < radius < 50.0' write(*,'(a,f10.5)') 'radius= ',radius write(*,'(a,f10.5)') 'circumference= ',circum(radius,pi) write(*,'(a,f10.5)') 'area= ',area(radius,pi) end ************************************************************************ subroutine get_pi(pi) ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) pi=4.d0*datan(1.d0) return end ************************************************************************ double precision function circum(r,pi) ************************************************************************ c c Calculates the circumference of a circle

Page 17: Computational Chemistry

Tasi Gyula: Számítógépes kémia

17

c implicit real*8(a-h,o-z) implicit integer*4(i-n) circum=2.d0*r*pi return end ************************************************************************ double precision function area(r,pi) ************************************************************************ c c Calculates the area of a circle c implicit real*8(a-h,o-z) implicit integer*4(i-n) area=r**2*pi return end

Ez a programunk már egy főprogramból (Eng. program main), egy szubrutinból (Eng. subroutine) és két függvényből (Eng. function) áll. Az implicit real*8(a-h,o-z) utasítás következtében minden olyan változó, melynek neve a kérdéses tartományokba tartozó betűvel kezdődik, automatikusan duplapontos (kétszeres pontosságú, 8 byte-os) valós szám (Eng. floating-point number) lesz. A 2.d0 konstans duplapontos valós szám. (Ne felejtsük el, hogy tizedes pontot használunk tizedes vessző helyett!) Az implicit integer*4(i-n) utasítás egész típusú változókra vonatkozik. Más programozási nyelvek nem szeretik az automatikus típusdeklarációt: minden változót külön-külön deklarálnunk kell! Mindenesetre úgy gondoljuk, hogy kellően óvatosan eljárva ez a lehetőség kényelmesebbé teszi a programozói munkát. A data utasítás segítségével a pi változónak kezdőértéket adunk: 0.d0. Amit a következő sorban az if utasítás segítségével ellenőrzünk. (Nyilván igaz logikai érték lesz az eredmény). Ha a pi értéke 0.d0, akkor meghívjuk a get_pi szubrutint a pi argumentummal, és beállítjuk a pi értékét:

4arctan 1 . Az utóbbit természetesen duplapontos számábrázolásban tesszük, és az arcus tangens FORTRAN könyvtári matematikai függvényt (atan(), datan()) alkalmazzuk.

Amíg a FORTRAN nyelvhez készítettek matematikai könyvtári (belső) függvényeket, addig a C nyelvhez nem.

Ezután beolvassuk a kör sugarának az értékét: read(*,*) radius. Ha ez túl kicsi vagy túl nagy, akkor megállítjuk a program futását, s kiíratjuk a képernyőre a megengedett inter-vallumot. A beolvasási utasításban az első csillag jelzi, hogy az alapértelmezett inputeszközt, azaz a billentyűzetet használjuk. A második csillag itt is azt jelzi, hogy az adatot formatálás nélkül olvassuk be. Ezután két függvényhívás történik, s kiíratjuk a képernyőre a függvények által visszaadott skalárokat: a kerületet és a területet. Látható, hogy a szubrutinokat a call utasítással hívjuk meg, s a név utáni argumentumlistában adjuk át és kapjuk meg a fontos adatokat. A függvényekre egyszerűen a nevükkel hivatkozunk, s a visszaadott értéket egy változóban tároljuk.

Még további fontos dolgokról kell beszélnünk. Az egyik az ún. “kevert” nyelvű prog-ramozás (Eng. mixed language programming) lehetősége. A következő cikkek ezzel a

Page 18: Computational Chemistry

Tasi Gyula: Számítógépes kémia

18

kérdéssel foglalkoznak: B. Einarsson, W.M. Gentleman, Mixed Language Programming, SoftwarePractice and Experience, 14, 383 (1984); B. Einarsson, Application of mixed language programming, Computer Physics Communications, 61, 150 (1990). A kevert nyelvű programozás révén például FORTRAN nyelven írt rutinokat használhatunk fel C nyelvű programokban és vice versa.

Ha a problémánk megoldása igen sok gépidőt igényel, s több egymással hálózat révén összekapcsolt – számítógép (klaszter, Eng. cluster) áll rendelkezésünkre, vagy az alapla-punkon több processzor/mag található, akkor érdemes a programunk paralelizálásán is elgon-dolkodni. Paralel kód révén ugyanis a feladatot több számítógép és/vagy több processzor/mag között tudjuk megosztani.

Klaszter használata esetén a klaszter fő gépe (Eng. master node) kiosztja a feladatokat a “rabszolgáknak” (Eng. slave nodes), majd egyesíti az eredményeket, s ha minden kész van, akkor befejezi a futást.

Az OpenMP paralel programozási környezet egyszerűen használható FORTRAN és C programjaink paralelizációjára. Ebben az esetben az alaplapunkon levő processzorokat és/vagy magokat tudjuk egyidejűleg (szimultán) használni, de a többi számítógép haszná-latára nincs lehetőségünk. A fejezet végén több könyvet is ajánlunk a paralel programozás iránt érdeklődők figyelmébe.

Sok kémikus – valamilyen szimbolikus matematikai programcsomag használatával még kényelmesebbé szeretné tenni a programozási munkát. Ilyen programcsomag például a MATHEMATICA. Jelen szerző az első MATHEMATICA programját és könyvét 1992-ben vette Hamburgban, amikor a hamburgi egyetem fizikai-kémiai intézetében dolgozott. Azóta sok idő eltelt, s a csetlő-botló, DOS alatt futó, esetlen programból igazi professzionális programozási környezet lett. Az interneten bőséges információ található a kérdéses program-ról, így itt nem írunk többet róla (www.wolfram.com). Érdemes néhány kidolgozott feladatot végigcsinálni, hogy megismerkedjünk a MATHEMATICA programmal. William Martin MCCLAIN könyve [24] különösen jó ebből a szempontból: ugyanis így a MATHEMATICA program mellett a kémiát is élvezhetjük.

Ajánlott irodalom

[1] S. Mueller, Upgrading and Repairing PCs, Pearson Education, Indianapolis, 2010. [2] J. Peek, G. Todino, J. Strang, Learning the UNIX Operating System, O'Reilly &

Associates, Cambridge, 1998. [3] E.M. Keller, Unix/Linux Survival Guide, Charles River Media, Hingham, 2006. [4] Kreitzberg, C. B. Introduction to FORTRAN; Harcourt Brace Jovanovich: Orlando,

1984. [5] I.D. Chivers, J. Sleightholme, Introduction to Programming with Fortran, Springer-

Verlag, London, 2006. [6] M. Metcalf, J. Reid, Fortran 90/95 Explained, Oxford University Press, Oxford,

1999. [7] S.J. Chapman, Fortran 95/2003 for Scientists and Engineers, McGraw-Hill, Boston,

2008.

Page 19: Computational Chemistry

Tasi Gyula: Számítógépes kémia

19

[8] Brainerd, W. S. Guide to Fortran 2003 Programming; Springer-Verlag: London, 2009.

[9] Akin, E. Object-Oriented Programming via Fortran 90/95; Cambridge University Press: Cambridge, 2003.

[10] Kernighan, B. W.; Ritchie, D. M. The C programming language, 2nd ed.; Prentice Hall: Englewood Cliffs, 1988.

[11] B. Chapman, G. Jost, R. Van der Pas, Using OpenMP: Portable Shared Memory Parallel Programming, Massachusetts Institute of Technology, Cambridge, 2008.

[12] W.P. Petersen, P. Arbenz, Introduction to Parallel Computing, Oxford University Press, Oxford, 2004.

[13] D.W. Rogers, Computational Chemistry Using the PC, John Wiley & Sons, Hoboken, 2003.

[14] D.C. Young, Computational Chemistry: A Practical Guide for Applying Techniques to Real-World Problems, John Wiley & Sons, New York, 2001.

[15] C.J. Cramer, Essentials of Computational Chemistry: Theories and Models, John Wiley & Sons, Chichester, 2004.

[16] F. Jensen, Introduction to Computational Chemistry, John Wiley & Sons, Chichester, 2007.

[17] W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P. Flannery, Numerical Recipes: The Art of Scientific Computing, Cambridge University Press, Cambridge, 2007.

[18] C.L. Janssen, I.M.B. Nielsen, Parallel Computing in Quantum Chemistry, CRC Press, Taylor & Francis Group, Boca Raton, 2008.

[19] Chambers, J. M.; Cleveland, W. S.; Kleiner, B.; Tukey, P. A. Graphical Methods for Data Analysis; Bell Telephone Laboratories: Murray Hill, 1983.

[20] Lewars, E. G. Modeling Marvels: Computational Anticipation of Novel Molecules; Springer Science+Business Media B.V.: New York, 2008.

[21] Murray, W., Ed. Numerical Methods for Unconstrained Optimization; Academic Press: London, 1972.

[22] Passos, W. D. Numerical methods, algorithms, and tools in C#; CRC Press: Boca Raton, 2010.

[23] Hoste, J. Mathematica Demystified; McGraw-Hill Companies: New York, 2009. [24] McClain, W. M. Symmetry Theory in Molecular Physics with Mathematica; Springer

Science+Business Media: Dordrecht, 2009. [25] Póta, G. Mathematical Problems for Chemistry Students; Elsevier: Amsterdam, 2006. [26] Manno, I. Introduction to the Monte-Carlo Method; Akadémiai Kiadó: Budapest,

1999. [27] Cook, D.G. Handbook of Computational Quantum Chemistry, Oxford University

Press, Oxford, 1998. [28] Wolberg, J., Prediction Analysis, Van Nostrand, Princeton, 1967. [29]. Wolberg, J., Data Analysis Using the Method of Least Squares: Extracting the Most

Information from Experiments, Springer-Verlag, Berlin, 2006.

Page 20: Computational Chemistry
Page 21: Computational Chemistry

Tasi Gyula: Számítógépes kémia

21

1. Atomi DESCARTES-koordináták előállítása molekuláris Z-mátrixból Merev molekulák szimmetriaelemeinek számítógépes meghatározásához és egyéb mole-

kulamodellezési számításokhoz gyakran van szükségünk atomi DESCARTES-koordinátákra. Ezek ad hoc generálása azonban nehéz feladat. Szerencsére, a kémikusi szemléletnek megfe-lelő belső koordináták (kötéshossz, kötésszög, valódi és nemvalódi torziós szög) segítségével viszonylag könnyen elő tudjuk állítani a molekulageometriánkat. A szükséges atomi szimbólumokat és belső koordinátákat ún. Z-mátrix formában adjuk meg (MK: 1-6.2.). A generált Z-mátrixot vektoralgebrai eszközök (MK: F.1-3.) segítségével konvertálni tudjuk atomi DESCARTES-koordinátákká [R.L. Hilderbrandt: Cartesian Coordinates of Molecular Models, J. Chem. Phys., 51, 1654 (1969); W.A. Sokalski: Evaluation of Molecular Cartesian Coordinates by A Programmable Calculator, Comput. Chem., 4, 165 (1980)].

A Z-mátrix minden egyes sora (rekordja) egy atom helyzetének a rögzítésére szolgál. Egy atom helyzetét a már előzőleg definiált (az előző sorokban megadott) atomokhoz viszonyítva adjuk meg. Az első három kapcsolódó atom helyzetének a rögzítéséhez nincs szükség torziós szögre: az első atomot (A1) az origóba helyezzük, a másodikat (A2) az X-tengely pozitív felére az A1 és az A2 atomok közötti kötéstávolságnak megfelelően, a harmadikat (A3) pedig az (X,Y) síkba úgy, hogy az atom y3 koordinátája nulla vagy pozitív. Itt az A3 és az A2 atomok közötti kötéstávolságot és az 1 2 3, ,A A A kötésszöget vesszük figyelembe. Természe-tesen, az sem okoz problémát, ha a harmadik atomot az elsőhöz kapcsoljuk. A 4. atomtól kezdve azonban egy torziós szöget is meg kell adni az atom helyzetének a rögzítése érdekében. A torziós szögek lehetséges értelmezési tartományai: (0,2 ] vagy ( , ]. Ha az utóbbit választjuk, akkor a torziós szög előjelét NEWMAN-projekcióval állapítjuk meg. A Z-mátrixban a távolságokat ångströmben, a szögeket pedig fokokban adjuk meg.

A Z-mátrix atomi DESCARTES-koordinátákká való konverziójához a következő ábrát készíthetjük:

Page 22: Computational Chemistry

Tasi Gyula: Számítógépes kémia

22

A feladat a következő: A Z-mátrix ismeretében határozzuk meg az A atom helyzetét a jobb-sodrású (X,Y,Z) DESCARTES-féle koordináta-rendszerben – az { , , }i j k bázisra vonatkozóan úgy, hogy a B, a C és a D atomok helyzetét (DESCARTES-féle koordinátáit) már ismerjük! Az ábrán látható, hogy az ABCD atomok két síkot jelölnek ki: BCD és ABC. A két sík által bezárt szög () az ABCD torziós szög. A kémiai kötéseknek megfelelő vektorok:

; ; . CB B C DC C D BA A Br r r r r r r r r

A B atomon felveszünk egy lokális koordináta-rendszert, melynek az egységvektorai:

( , , ) ; ( , , ) ; ( , , ) ;

.

x y z x y z x y z

x y z

x y z

x y z

l l l n n n m m m

l l l

m m m

n n n

CB DC CB

CB DC CB

r r rl n m n l

r r r

l i

m j

n k

Ezek szintén jobbsodrású koordináta-rendszert alkotnak. Adjuk meg az A atom koordinátáit az { , , }l m n bázisra vonatkozóan ( ( , , )l m nA A A ):

cos( ) cos ;

sin( ) cos sin cos ;

sin( )sin sin sin .

l

m

n

A

A

A

BA BA

BA BA

BA BA

r r

r r

r r

Az ( , , )l m nA A A az rBA vektor { , , }l m n bázisra vonatkozó koordinátái. Mivel , A B BAr r r

ezért az A atom ( , , )x y zA A A pozícióját könnyen megkaphatjuk az { , , }i j k bázisra vonatko-

zóan:

;x y z x y zA A A A A A

A

i

r i j k j

k

;x y z x y zB B B B B B

B

i

r i j k j

k

.

x y z x y z l m n

x y z

x y z l m n x y z

x y z

A A A B B B A A A

l l l

B B B A A A m m m

n n n

A B BA

i i l

r j r r j m

k k n

i i

j j

k k

Hajtsuk végre a kijelölt műveleteket, majd az i, j, k vektorok koefficienseit tegyük egyenlővé a két oldalon, azaz vegyük figyelembe, hogy az { , , }i j k ortonormált bázis lineárisan függet-len. Kapjuk, hogy

Page 23: Computational Chemistry

Tasi Gyula: Számítógépes kémia

23

;x

x x l m n x

x

l

A B A A A m

n

;y

y y l m n y

y

l

A B A A A m

n

.z

z z l m n z

z

l

A B A A A m

n

Ezzel megkaptuk a keresett atomi DESCARTES-koordinátákat. A számítások végrehajtásához az alábbi egyszerű FORTRAN programot készítettük:

************************************************************************ program main ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) character title*70 parameter(mat=100) dimension nat(mat),coord(3,mat) dimension zm(3,mat),na(mat),nb(mat),nc(mat) data pi/0.d0/ save pi if(pi.eq.0.d0) pi=4.d0*datan(1.d0) read(*,'(a70)') title read(*,*) natoms do i=1,natoms read(*,*) nat(i),(zm(j,i),j=1,3),na(i),nb(i),nc(i) end do do i=1,natoms zm(2,i)=zm(2,i)*pi/180.d0 zm(3,i)=zm(3,i)*pi/180.d0 end do call z2c(natoms,zm,coord,na,nb,nc) write(*,'(a70)') title write(*,'(i5)') natoms do i=1,natoms write(*,'(i3,2x,3f18.8)') nat(i),(coord(j,i),j=1,3) end do end ************************************************************************ subroutine z2c(natoms,zm,coord,nb,nc,nd) ************************************************************************ * Subroutine Z2C evaluates the Cartesian coordinates of atoms from a * * Z-matrix built up from bond lengths, bond angles, and torsional * * angles. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary *

Page 24: Computational Chemistry

Tasi Gyula: Számítógépes kémia

24

* References: * * R.L. Hilderbrandt, J. Chem. Phys., 51, 1654 (1969). * * W.A. Sokalski, Comput. Chem., 4, 165 (1980). * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter (mat=100) dimension zm(3,mat),coord(3,mat),nb(mat),nc(mat),nd(mat) dimension rcb(3),rdc(3),sl(3),sn(3),sm(3) do i=1,natoms coord(1,i)=0.d0 coord(2,i)=0.d0 coord(3,i)=0.d0 end do if(natoms.eq.1) return coord(1,2)=zm(1,2) if(natoms.eq.2) return alfa=zm(2,3) if(nb(3).eq.2) then coord(1,3)=coord(1,2)-zm(1,3)*dcos(alfa) coord(2,3)=zm(1,3)*dsin(alfa) elseif(nb(3).eq.1) then coord(1,3)=zm(1,3)*dcos(alfa) coord(2,3)=zm(1,3)*dsin(alfa) endif if(natoms.eq.3) return do j=4,natoms n1=nb(j) n2=nc(j) n3=nd(j) rabl=zm(1,j) alfa=zm(2,j) beta=zm(3,j) do i=1,3 rcb(i)=coord(i,n1)-coord(i,n2) rdc(i)=coord(i,n2)-coord(i,n3) end do rcbl=dsqrt(dot(rcb,rcb,3)) do i=1,3 sl(i)=rcb(i)/rcbl end do call crossp(rdc,rcb,sn) snl=dsqrt(dot(sn,sn,3)) do i=1,3 sn(i)=sn(i)/snl end do call crossp(sn,sl,sm) sla=-rabl*dcos(alfa) sma=rabl*dsin(alfa)*dcos(beta) sna=rabl*dsin(alfa)*dsin(beta) do i=1,3 coord(i,j)=coord(i,n1)+sla*sl(i)+sma*sm(i)+sna*sn(i) end do end do return end

Page 25: Computational Chemistry

Tasi Gyula: Számítógépes kémia

25

************************************************************************ subroutine crossp(x,y,z) ************************************************************************ c c Vectorial product of two vectors c implicit real*8(a-h,o-z) implicit integer*4(i-n) dimension x(3),y(3),z(3) z(1)=x(2)*y(3)-x(3)*y(2) z(2)=-x(1)*y(3)+x(3)*y(1) z(3)=x(1)*y(2)-x(2)*y(1) return end ************************************************************************ double precision function dot(x,y,n) ************************************************************************ c c Scalar product of two vectors c implicit real*8(a-h,o-z) implicit integer*4(i-n) dimension x(*),y(*) dot=0.d0 do i=1,n dot=dot+x(i)*y(i) end do return end

Látható, hogy a főprogram az inputeszközről (billentyűzet vagy fájl) beolvassa a Z-mátrixot, majd meghívja a z2c szubrutint, ami végrehajtja a konverziót, s végül a főprogram kiírja az outputeszközre (monitor vagy fájl) az atomi DESCARTES-koordinátákat. A programunk tartal-maz még egy szubrutint a vektoriális szorzás (subroutine crossp()), s egy függvényt a skaláris szorzás (double precision function dot()) végrehajtására (MK: F.1-3.).

Mentsük el a forráskódot z2c.f néven a háttértárolónk egy könyvtárában (pl. /home/user/cc)! A későbbiekben mindig ezt a könyvtárat fogjuk használni, azaz bejelentkezés után ide lépünk be: >cd cc. Ezután készítsük el a futtatható programunkat a Portland Group FORTRAN 90-es fordító programjával (pgf90) Linux operációs rendszer alatt! A pgf90 helyett a megfelelő Intel fordítót (ifort, ifc) is használhatjuk. A következő utasítással tudjuk létrehozni a futtatható z2c.exe programunkat:

>pgf90 –o z2c.exe z2c.f

Példa: Milyen szimmetriával rendelkezik a propinmolekula alapállapotban? Állítsuk elő a molekula Z-mátrixát, majd határozzuk meg az egyes atommagok DESCARTES-koordinátáit! Ha a kérdéses szimmetriát rögzítjük, mennyi lesz a szabad geometriai paraméterek száma?

Megoldás: A Z-mátrix előállításához a következő ábrát készíthetjük:

Page 26: Computational Chemistry

Tasi Gyula: Számítógépes kémia

26

Látható, hogy a 4. és a 8. atomok álatomok. (Az álatomok jelölésére az X betű szolgál.) Az ábra alapján a következő Z-mátrixot állíthatjuk elő:

I Vegyjel Kötéshossz Kötésszög Torziós szög J K L

1 H 0.0 0.0 0.0 0 0 0

2 C 1.1 0.0 0.0 1 0 0

3 C 1.4 110.0 0.0 2 1 0

4 X 1.0 90.0 0.0 3 2 1

5 H 1.1 110.0 120.0 2 3 1

6 H 1.1 110.0 240.0 2 3 1

7 C 1.2 90.0 180.0 3 4 2

8 X 1.0 90.0 0.0 7 3 4

9 H 1.1 90.0 180.0 7 8 3

Könnyen megállapítható, hogy a kérdéses egyensúlyi geometria a C3v pontcsoportba tartozik (nem véve természetesen figyelembe az álatomokat). A szabadsági fokok száma a szimmetria figyelembevétele nélkül: 7 3 6 15. A C3v szimmetriát megkövetelve mennyi lesz a szabad geometriai paraméterek száma? Határozzuk meg a szabad geometriai paramétereket! Ennek érdekében soroljuk fel az ekvivalens (azonos) és a rögzített geometriai paramétereket. Az ekvivalens C-H kötéshosszak: 1 2, 5 2, 6 2; az ekvivalens HCC kötésszögek: 3 2 1, 5 2 3, 6 2 3; a rögzített torziós szögek: 5 2 3 1, 6 2 3 1, 7 3 4 2, 9 7 8 3. A szabadon választható geometriai paraméterek végül is a követ-kezők: 2 CH kötéshossz, 1 CC egyes kötéshossz, 1 CC hármas kötéshossz és 1 HCC kötés-szög. A szabad geometriai paraméterek száma tehát a szimmetria rögzítésével nagymértékben redukálódik: 15 helyett 5 lesz.

Készítsük most el a propinmolekula Z-márixát tartalmazó inputfájlt! Használjuk ehhez a vi editort. Az első sorba írjuk be a molekula nevét. A másodikban adjuk meg az atomok számát. Majd az ezutáni sorokban – a fentieknek megfelelően definiáljuk minden atom helyzetét belső koordináták segítségével. Az egyszerűség kedvéért vegyjelek helyett használ-junk rendszámokat az atomok definiálására (nat() tömb)! Az álatomok rendszáma legyen 99. (Erre a rendszámra ugyanis feltehetőleg nem lesz szükségünk.) Így a DESCARTES-koordi-nátákat tartalmazó outputban azonnal látni fogjuk azokat a sorokat, amik az álatomok koordi-nátáit tartalmazzák. Ezeket a sorokat a későbbiekben egyszerűen kitörölhetjük. Az elkészített inputfájl tartalma:

Page 27: Computational Chemistry

Tasi Gyula: Számítógépes kémia

27

propin

9

1 0.0 0.0 0.0 0 0 0

6 1.1 0.0 0.0 1 0 0

6 1.4 110.0 0.0 2 1 0

99 1.0 90.0 0.0 3 2 1

1 1.1 110.0 120.0 2 3 1

1 1.1 110.0 240.0 2 3 1

6 1.2 90.0 180.0 3 4 2

99 1.0 90.0 0.0 7 3 4

1 1.1 90.0 180.0 7 8 3

A programszerkesztővel elkészített inputot ugyanabba a könyvtárba mentjük el, ahol a z2c.exe programunk található (/home/user/cc). Az inputfájl neve: propin.zmt. A program futtatásához a következő utasítást kell adnunk:

>z2c.exe < propin.zmt

Így az output a képernyőre íródik (elhagyva a dummy atomokat):

propin 7 1 0.00000000 0.00000000 0.00000000 6 1.10000000 0.00000000 0.00000000 6 1.57882820 1.31556967 0.00000000 1 1.45698667 -0.53029978 -0.89517745 1 1.45698667 -0.53029978 0.89517745 6 1.98925237 2.44320081 0.00000000 1 2.36547453 3.47686270 0.00000000

Ha azt szeretnénk, hogy az output a propin.dat fájlba kerüljön, akkor át kell irányíta-nunk az outputot:

>z2c.exe < propin.zmt > propin.dat

Ekkor az output – a képernyő helyett a propin.dat fájlba fog kerülni. A propin.dat fájl tartalmát a vi editor segítségével megnézhetjük. (Ne felejtsük el kitörölni belőle az álatomokat!) Ha valamit elrontunk, akkor fordításkor vagy futtatáskor hibaüzenet(ek)et kaphatunk.

Feladatok:

1.1 Milyen szimmetriával rendelkezik a ciklopropán-molekula alapállapotban? Állítsa elő a molekula Z-mátrixát, majd határozza meg az egyes atommagok DESCARTES-koordinátáit! Ha a kérdéses szimmetriát rögzíti, mennyi lesz a szabad geometriai paraméterek száma?

1.2 Állítsa elő az alapállapotú 1-butén-3-in molekula Z-mátrixát, majd határozza meg az egyes atommagok DESCARTES-koordinátáit! Tegyük fel, hogy a kérdéses geometria planáris. Mennyi lesz a szabad geometriai paraméterek száma?

Page 28: Computational Chemistry

Tasi Gyula: Számítógépes kémia

28

1.3 Állítsa elő az alapállapotú benzolmolekula Z-mátrixát (D6h pontcsoport), majd határozza meg az egyes atommagok DESCARTES-koordinátáit! Mennyi lesz a szabad geometriai para-méterek száma, ha a kérdéses szimmetriát rögzítjük?

1.4 Állítsa elő az alapállapotú kubánmolekula Z-mátrixát (Oh pontcsoport), majd határozza meg az egyes atommagok DESCARTES-koordinátáit! Mennyi lesz a szabad geometriai para-méterek száma, ha a kérdéses szimmetriát rögzíti?

1.5 Állítsa elő az alapállapotú ciklopentán-molekula Z-mátrixát (C2 pontcsoport), majd hatá-rozza meg az egyes atommagok DESCARTES-koordinátáit! Mennyi lesz a szabad geometriai paraméterek száma, ha a kérdéses szimmetriát rögzítjük?

Page 29: Computational Chemistry

Tasi Gyula: Számítógépes kémia

29

2. Forgatások és tükrözések a 3-dimenziós térben Molekulák geometriájának leírásához általában két térbeli DESCARTES-féle koordináta-

rendszert szokás felvenni. Az első ún. laboratóriumi koordináta-rendszerünket, (X,Y,Z), a térben rögzítjük, a második ún. molekuláris koordináta-rendszerünket, (x,y,z), pedig a molekula tömegközéppontjában vesszük fel, s mindkét koordináta-rendszer jobbsodrású (MK: F.1-3.):

A laboratóriumi koordináta-rendszerben a molekula tömegközéppontjának koordinátái:

, , .i i i i i i

i i icm cm cm

i i ii i i

m X m Y m ZX Y Z

m m m

ahol mi az i-ik atom tömege és Xi, Yi, Zi pedig az i-ik atommag helyzetét a laboratóriumi koordináta-rendszerben megadó helyvektor komponensei. A molekuláris koordináta-rendsze-rünk tengelyei először legyenek párhuzamosak a laboratóriumi koordináta-rendszerünk tengelyeivel. Az i-ik atommag koordinátáit a molekuláris koordináta-rendszerben következő-képpen fejezhetjük ki:

, , .i i cm i i cm i i cmx X X y Y Y z Z Z

Tekintsük az (x,y,z) koordináta-rendszerben az i-ik atommag Ri helyvektorát, s forgassuk meg azt az x-tengely körül szöggel úgy, hogy irányába nézve a forgás az óramutató járásával ellentétes értelmű legyen! Elemi geometriai megfontolások alapján a forgatás ered-ményeként kapott iR helyvektor következőképpen kapható meg az Ri helyvektorból:

1 0 0

0 cos sin .

0 sin cos

i i

i i x i i

i i

x x

y y

z z

R O R

A forgatást kifejező Ox mátrix ortogonális és determinánsa +1. Hasonlóan az y- és a z-tengelyek körüli ill. szögű forgatásokat végrehajtó Oy és Oz mátrixok:

Page 30: Computational Chemistry

Tasi Gyula: Számítógépes kémia

30

cos 0 sin

0 1 0

sin 0 cosy

O

és cos sin 0

sin cos 0 .

0 0 1z

O

A három elemi forgatás O szorzata:

cos cos cos sin sin

cos sin sin sin cos cos cos sin sin sin sin cos .

sin sin cos sin cos sin cos cos sin sin cos cosx y z

O O O O

Az xy-, az xz- és az yz-síkokra való tükrözéseknek megfelelő mátrixok:

1 0 0

0 1 0 ;

0 0 1xy

M

1 0 0

0 1 0 ;

0 0 1xz

M

1 0 0

0 1 0 .

0 0 1yz

M

Ezek a mátrixok is ortogonálisak és a determinánsuk 1. Készítsünk egy szubrutint a molekula tömegközéppontjának a számítására, és határozzuk

meg az atommagok DESCARTES-koordinátáit a tömegközéppontra vonatkozóan! A tömeg-középpont számításához szükségünk lesz atomtömegekre is (wt() tömb). A szubrutint cmass.f néven mentsük el!

************************************************************************ subroutine cmass(natoms,nat,wt,coord,wmol,cmx,cmy,cmz) ************************************************************************ * Subroutine CMASS calculates the center of mass of a molecule, and * * shifts the origin to it. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter(mat=100)

Page 31: Computational Chemistry

Tasi Gyula: Számítógépes kémia

31

dimension wt(90),coord(3,mat),nat(mat) sumwx=0.d0 sumwy=0.d0 sumwz=0.d0 wmol=0.d0 do i=1,natoms nati=nat(i) wmol=wmol+wt(nati) sumwx=sumwx+wt(nati)*coord(1,i) sumwy=sumwy+wt(nati)*coord(2,i) sumwz=sumwz+wt(nati)*coord(3,i) end do cmx=sumwx/wmol cmy=sumwy/wmol cmz=sumwz/wmol do i=1,natoms coord(1,i)=coord(1,i)-cmx coord(2,i)=coord(2,i)-cmy coord(3,i)=coord(3,i)-cmz end do return end

Az atomok tömegét legkényelmesebben egy common adatmezőben helyezhetjük el. Így mindenütt fel tudjuk használni az értékeket. A common adatmezőket block data struktú-rában tudjuk inícializálni, azaz adatokkal feltölteni. A fájl neve legyen blockdata.f.

************************************************************************ block data ************************************************************************ implicit real*8 (a-h,o-z) implicit integer*4(i-n) common/weight/ wt(90) common/adat1/ pi,delta data pi,delta/0.d0,0.01d0/ data wt/ 1.00783d0, 4.00260d0, 6.94000d0, 9.01218d0, $ 10.81000d0, 12.00000d0, 14.00307d0, 15.99491d0, 18.99840d0, $ 20.17900d0, 22.98977d0, 24.30500d0, 26.98154d0, 28.08550d0, $ 30.97376d0, 32.06000d0, 35.45300d0, 39.94800d0, 39.09830d0, $ 40.08000d0, 44.95590d0, 47.90000d0, 50.94150d0, 51.99600d0, $ 54.93800d0, 55.84700d0, 58.93320d0, 58.71000d0, 63.54600d0, $ 65.38000d0, 69.73500d0, 72.59000d0, 74.92160d0, 78.96000d0, $ 79.90400d0, 83.80000d0, 85.46780d0, 87.62000d0, 88.90590d0, $ 91.22000d0, 92.90640d0, 95.94000d0, 98.90620d0, 101.0700d0, $ 102.9055d0, 106.4000d0, 107.8680d0, 112.4100d0, 114.8200d0, $ 118.6900d0, 121.7500d0, 127.6000d0, 126.9045d0, 131.3000d0, $ 132.9054d0, 137.3300d0, 15*0.000d0, 178.4900d0, 180.9479d0, $ 183.8500d0, 186.2070d0, 190.2000d0, 192.2200d0, 194.9648d0, $ 196.9665d0, 200.5900d0, 204.3700d0, 207.2000d0, 208.9804d0, $ 7*0.000d0/ end

Látható, hogy minden elem esetén a legstabilabb izotóp tömegét adjuk meg atomi tömeg-egységben a weight nevű common adatmezőben. A wt() tömb egészen a 90-es rendszá-mig tartalmazza a tömegeket. (Vigyázzunk, több elem tömege zéró értékkel szerepel!)

A forgatási és a tükrözési mátrixok előállítására és a konkrét forgatások és tükrözések végrehajtására készítsünk szubrutinokat!

Page 32: Computational Chemistry

Tasi Gyula: Számítógépes kémia

32

************************************************************************ subroutine rotate(natoms,alpha,coord,c,ijk) ************************************************************************ * Subroutine ROTATE computes the rotation matrices around the x, y and * * z axes, and rotates the molecule. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8 (a-h,o-z) implicit integer*4(i-n) parameter(mat=100) dimension r(3,3),coord(3,mat),c(3,mat) do i=1,3 do j=1,3 r(i,j)=0.d0 end do end do sina=dsin(alpha) cosa=dcos(alpha) if(ijk.eq.1) then c c Rotation about x axis c r(1,1)=1.d0 r(2,2)=cosa r(2,3)=sina r(3,2)=-sina r(3,3)=cosa elseif(ijk.eq.2) then c c Rotation about y axis c r(1,1)=cosa r(1,3)=-sina r(2,2)=1.d0 r(3,1)=sina r(3,3)=cosa elseif(ijk.eq.3) then c c Rotation about z axis c r(1,1)=cosa r(1,2)=sina r(2,1)=-sina r(2,2)=cosa r(3,3)=1.d0 endif do k=1,natoms do j=1,3 c(j,k)=r(j,1)*coord(1,k)+r(j,2)*coord(2,k)+ $ r(j,3)*coord(3,k) end do end do return end

Page 33: Computational Chemistry

Tasi Gyula: Számítógépes kémia

33

Az ijk paraméterrel adjuk meg, hogy melyik tengely körül kívánjuk végrehajtani a forga-tást, és a c(:) tömbbe kerülnek a transzformált koordináták. A szubrutint a rotate.f fájlban tároljuk. Nézzük most meg a tükrözéseket!

************************************************************************ subroutine rflect(natoms,coord,c,ijk) ************************************************************************ * Subroutine RFLECT reflects the molecule. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter(mat=100) dimension coord(3,mat),c(3,mat) if(ijk.eq.1) then c c Reflection to the xy plane c do i=1,natoms c(1,i)=coord(1,i) c(2,i)=coord(2,i) c(3,i)=-coord(3,i) end do elseif(ijk.eq.2) then c c Reflection to the xz plane c do i=1,natoms c(1,i)=coord(1,i) c(2,i)=-coord(2,i) c(3,i)=coord(3,i) end do elseif(ijk.eq.3) then c c Reflection to the yz plane c do i=1,natoms c(1,i)=-coord(1,i) c(2,i)=coord(2,i) c(3,i)=coord(3,i) end do endif return end

A forráskód itt is magáért beszél. Mentsük el ezt a szubrutint rflect.f néven. Látható, hogy magukat a tükrözési mátrixokat nem állítjuk elő, csak a tükrözéseket hajtjuk végre: míg a coord(:) tömb az eredeti, addig a c(:) tömb a transzformált koordinátákat tartalmaz-za. Az elkészített szubrutinokat a következő fejezetekben használni fogjuk.

A forgatási és a tükrözési műveletek közül a lehető legegyszerűbbeket tanulmányoztuk ebben a projektben: tetszőleges tengely körüli forgatással és tetszőleges síkra való tükrözéssel nem foglalkoztunk. Ezekre egyelőre ugyanis nincs szükségünk. A téma iránt mélyebben

Page 34: Computational Chemistry

Tasi Gyula: Számítógépes kémia

34

érdeklődőknek Ian O. ANGELL és Gareth GRIFFITH könyvét ajánljuk: High-resolution Computer Graphics Using FORTRAN 77, Macmillan, London (1989).

Feladatok:

2.1 Készítsünk egy kis programot, ami az 1. projektben ångströmben meghatározott atomi DESCARTES-koordinátákat atomi egységekbe (bohr, atomi hosszúságegység) transzformálja! A konverziós faktor jelenlegi legpontosabb értéke (lásd a “Néhány alapvető és származtatott fizikai állandó” fejezetet): 1 bohr = 0.52917720859 Å. A szubrutin neve ang2au, a fájl neve pedig ang2au.f legyen! Írjuk meg a beolvasás és a kiíratás végrehajtásához szükséges főprogramot is!

2.2 Egészítsük ki az előző feladatban írt kis programot úgy, hogy a főprogramban meghívjuk a cmass szubrutint, s a tömegközéppontba helyezzük a koordináta-rendszerünk origóját.

Page 35: Computational Chemistry

Tasi Gyula: Számítógépes kémia

35

3. Szimmetrikus mátrixok diagonalizációja JACOBI módszerével Kémiai-fizikai alkalmazásokban gyakran kell diagonalizálnunk valós szimmetrikus mát-

rixokat (MK: 1-4.). A mátrixalgebrában tárgyalt hasonlósági transzformációnak fontos szere-pe van a hatékony és gyors eljárásokban. Valamennyi gyors és megbízható módszer alapja ugyanis az, hogy az A mátrixot hasonlósági transzformációk szukcesszív alkalmazásával diagonális alakra hozzuk:

1lim .k k ik

T AT diag

Az eljárás végén diagonális mátrixot kapunk a sajátértékekkel, s a T1T2 ... mátrix oszlopai a megfelelő sajátvektorok lesznek. Ha csak a sajátértékekre van szükségünk, akkor nem kell teljes diagonalizációt végrehajtanunk. Elegendő az A mátrixot alsó, vagy felső háromszög-alakra hozni: a háromszögmátrixban a diagonális elemek már a sajátértékek lesznek.

Szimmetrikus mátrixok diagonalizációjára használt JACOBI-féle módszernél elemi ortogonális transzformációkat tervezünk adott off-diagonális elemek kinullázására. A HOUSEHOLDER-transzformációnál egy adott sorban ill. oszlopban álló off-diagonális elemek egyidejű kinullá-zására készítünk ortogonális transzformációkat.

Általában az ilyen transzformációk véges sok lépésben nem tudják tökéletesen diagonális alakra hozni a mátrixot. Két megoldás lehetséges: (i) iteratív eljárásban addig alkalmazzuk az egyszerű ortogonális transzformációkat, amíg a diagonális formától való eltérés egy előre meghatározott mértéknél kisebbé nem válik, vagy (ii) véges sok transzformáció alkalma-zásával speciális (pl. tridiagonális) alakra hozzuk a mátrixot, s ezután valamilyen (pl. QR) faktorizációs módszert alkalmazunk. Az (i) megoldás elvileg igen egyszerű, azonban n > 10 esetén számítástechnikai szempontból a faktorizációs módszerekhez képest kevésbé haté-kony.

A JACOBI-féle diagonalizációs módszer ortogonális transzformációk egymás utáni végre-

hajtásából álló iteratív eljárás. Mindegyik transzformáció (JACOBI-féle rotáció) tulajdonkép-

pen egy síkbeli forgatás, amely két előre meghatározott off-diagonális elemet (apq, aqp) tesz

nullává. Tegyük fel, hogy az A mátrixban (A = {aij}, dim(A) = n n) az apq elemet akarjuk

kinullázni. Ennek megvalósításához képezzük a következő mátrixot:

1

1

1

pq

c s p

s c q

p q

T

ahol c = cosθ és s = sinθ (θ a síkbeli rotáció szöge és természetesen c2 + s2 = 1). (A mátrixban

az explicite nem jelölt elemek mind nullák.) Könnyen megmutatható, hogy a Tpq mátrix orto-

Page 36: Computational Chemistry

Tasi Gyula: Számítógépes kémia

36

gonális, s az Tpq pq A T AT mátrix a p-ik és a q-ik sorokat és oszlopokat kivéve azonos az A-

val. A szorzás explicit végrehajtásával a p-ik és a q-ik sorban és oszlopban álló A'-mátrix-

elemek: ( , );ip ip iqa ca sa i p q

( , );iq iq ipa ca sa i p q

2 2 2 ;pp pp qq pqa c a s a sca

2 2 2 ;qq pp qq pqa s a c a sca

2 2( ) ( ).pq pq pp qqa c s a sc a a

Mivel az pqa elemet akarjuk kinullázni, ezért θ-t következőképpen kell megválasztanunk:

2 2( ) ( ) 0,pq pq pp qqa c s a sc a a

azaz 2 2

.2 2

qq pp

pq

a ac s

sc a

Legyen t = s/c = tgθ, így az előző egyenlet következőképpen alakul: 2 2 1 0.t t

A numerikus stabilitás biztosítása érdekében a másodfokú egyenlet kisebb abszolútértékű gyökét választjuk, ha α 0. Ha α = 0, akkor t = 1 a kedvezőbb megoldás. A t számítására tehát a következő formulákat használjuk:

2

2

1 ( 0);

1 ( 0).

t

t

A t ismeretében a fenti egyenletekben szereplő c és s konstansok egyszerűen meghatároz-hatók:

2

1;

1c

t

2.

1

ts ct

t

A JACOBI-módszer konvergenciáját az előző egyenletek segítségével könnyen beláthatjuk. Tekintsük ugyanis a kiindulási mátrix off-diagonális elemeinek a négyzetösszegét:

2.ij

i j

S a

Az apq és az aqp elemek kinullázása után: 2

2 .pqS S a

Így az S monoton csökken és tart 0-hoz. A diagonális elemek négyzetösszege persze ugyan-ennyivel növekszik, mivel ortogonális transzformációról van szó.

Ezek után az a kérdés merül fel, hogy hogyan válasszuk ki az apq elemeket. A szakiro-

dalomban a következő stratégiákat szokták alkalmazni:

Page 37: Computational Chemistry

Tasi Gyula: Számítógépes kémia

37

(1) Klasszikus JACOBI-módszer. Ennél a módszernél a legnagyobb abszolútértékű off-diago-nális elemet választjuk ki:

max .k kpq ij

i ja a

(2) Ciklikus JACOBI-módszer. Mivel a legnagyobb abszolútértékű off-diagonális elem megke-resése időigényes, ezért érdemes a (p,q) off-diagonális elemeket ciklikusan sorra venni: (1,2), (1,3), ..., (1,n); (2,3), ..., (2,n); ..., (n-1,n) vagy (2,1); (3,1), (3,2); ...; (n,1), (n,2), ..., (n,n-1) Természetesen, ha a kérdéses elem már nulla, akkor a következő elemre ugrunk. (3) Módosított ciklikus JACOBI-módszer. Az eljárás azonos a ciklikus JACOBI-módszernél bemutatottal azzal az eltéréssel, hogy ha a kérdéses off-diagonális elem abszolút értéke egy bizonyos előre megadott kicsiny számnál kisebb, akkor azt átugorjuk.

Meg kell azonban jegyezni, hogy bármelyik stratégiát választjuk is, az egy adott lépésben kinullázott elemek a következő lépésben nemzérus, de az eredetinél kisebb abszolútértékű elemekkel helyettesítődhetnek. Korábban már említettük, hogy a JACOBI-féle módszerrel véges számú lépésben nem lehet tökéletesen diagonális mátrixot előállítani: az eljárást vala-milyen pontosság elérése után terminálnunk kell.

Az eljárás végén egy olyan Λ mátrixot kapunk, ami a számítási pontosságnak megfele-lően diagonális: Λ = XTAX, ahol X = T1 T2 T3 ... Az X = {xij} mátrix oszlopai lesznek a sajátvektorok. A λi sajátértékhez az x1i x2i ... xniT oszlopvektor szolgáltatja az xi saját-vektort. Az újabb X mátrix (X') tehát az X mátrixból következőképpen számítható: X' = X Ti. Írjuk fel részletesen a kérdéses összefüggéseket:

( , ; 1, 2, , );

;

.

is is

ip ip iq

iq ip iq

x x s p q i n

x cx sx

x sx cx

Az eljárás elején a kiindulási X mátrixot egységmátrixnak vesszük fel. Az alábbiakban egy FORTRAN nyelvű szubrutint mutatunk be a módosított ciklikus

JACOBI-transzformáció végrehajtására. A szubrutin bemenő adatai: a(:) az A mátrix tömbje, n az A mátrix aktuális rendje, tiny egy előre megadott kicsiny szám és iord a sajátértékek és a sajátvektorok rendezését meghatározó egész típusú változó. Ha iord = +1, akkor a sajátértékek növekvő sorrendben lesznek az output d() tömbben, míg iord = 1 esetén a sorrend csökkenő. A szubrutin kimenő adatai: d() a sajátértékek és x(:) a sajátvektorok tömbje. Az eljárás során, ha az off-diagonális elem abszolút értéke tiny, akkor átugorjuk. Az eljárás akkor fog terminálódni, ha a legnagyobb abszolútértékű off-diagonális elem tiny. A szubrutin paraméterei: nmax, az A mátrix maximális rendje és itmax, az iterációk számára vonatkozó korlát.

Page 38: Computational Chemistry

Tasi Gyula: Számítógépes kémia

38

************************************************************************ subroutine jacobi(a,nmax,n,d,x,tiny,iord) ************************************************************************ * Subroutine JACOBI determines the eigenvalues and eigenvectors of a * * symmetric matrix using the threshold Jacobian method. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ * a(:) : input matrix to be diagonalized * * nmax : maximum order of the problem * * n : actual order * * tiny : a tiny number (threshold) * * iord : sorting variable, +1: increasing order, -1: decreasing order * * x(:) : matrix of the eigenvectors * * d() : block of the eigenvalues * * itmax: maximum number of the Jacobian rotations * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter (itmax=50) dimension a(nmax,nmax),x(nmax,nmax),d(nmax) do i=1,n do j=1,n x(i,j)=0.d0 end do x(i,i)=1.d0 end do do i=1,n d(i)=a(i,i) end do do iter=1,itmax amax=0.d0 do i=2,n do 10 j=1,i-1 aii=d(i) ajj=d(j) aij=a(i,j) if(dabs(aij).gt.amax) amax=dabs(aij) if(dabs(aij).le.tiny) goto 10 alpha=0.5d0*(aii-ajj)/aij c t=s/c t=-alpha+dsqrt(1.d0+alpha**2) if(alpha.lt.0.d0) t=-alpha-dsqrt(1.d0+alpha**2) c=1.d0/dsqrt(1.d0+t**2) s=c*t do 20 k=1,n xj=c*x(k,j)-s*x(k,i) x(k,i)=s*x(k,j)+c*x(k,i) x(k,j)=xj if(k.eq.j) goto 20 if(k.lt.j) then xj=c*a(j,k)-s*a(i,k) a(i,k)=s*a(j,k)+c*a(i,k) a(j,k)=xj goto 20 endif

Page 39: Computational Chemistry

Tasi Gyula: Számítógépes kémia

39

if(k.eq.i) goto 20 if(k.lt.i) then xj=c*a(k,j)-s*a(i,k) a(i,k)=s*a(k,j)+c*a(i,k) a(k,j)=xj goto 20 endif xj=c*a(k,j)-s*a(k,i) a(k,i)=s*a(k,j)+c*a(k,i) a(k,j)=xj 20 continue d(i)=c*c*aii+s*s*ajj+2.d0*s*c*aij d(j)=c*c*ajj+s*s*aii-2.d0*s*c*aij a(i,j)=0.d0 10 continue end do if(amax.le.tiny) goto 30 end do 30 continue if(iord.eq.1) then c c Arrange eigenvalues in increasing order c do k=1,n-1 dmn=d(k) kmin=k do j=k+1,n if(dmn.gt.d(j)) then kmin=j dmn=d(j) endif end do if(k.ne.kmin) then do j=1,n call swap(x(j,kmin),x(j,k)) end do call swap(d(kmin),d(k)) endif end do elseif(iord.eq.-1) then c c Arrange eigenvalues in decreasing order c do k=1,n-1 dmx=d(k) kmax=k do j=k+1,n if(dmx.lt.d(j)) then kmax=j dmx=d(j) endif end do if(k.ne.kmax) then do j=1,n call swap(x(j,kmax),x(j,k)) end do call swap(d(kmax),d(k)) endif end do

Page 40: Computational Chemistry

Tasi Gyula: Számítógépes kémia

40

endif return end ************************************************************************ subroutine swap(a,b) ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) temp=a a=b b=temp return end

A jacobi szubrutinban a bemenő A mátrix egy részét “megszüntetjük”: az alsó háromszög-mátrixot kinullázzuk. Ha a szubrutin meghívása után is szükségünk van az A mátrixra, akkor vissza kell állítanunk az A mátrix eredeti tartalmát:

do i=2,n do j=1,i-1 a(i,j)=a(j,i) end do end do

Érdemes ezt a kis részt beszúrni a jacobi szubrutinban a return utasítás elé. A FORTRAN nyelvben nem érték-, hanem címátadás történik. Ennek megfelelően könnyen átírhatjuk a memóriának azt a részét, ahova a változókat, tömböket eredetileg elmentettük, s így azok szubrutin- vagy függvényhívás után elveszhetnek.

Készítsünk egy főprogramot a mátrix elemeinek a beolvasására (diag.f)! Hívjuk meg a jacobi szubrutint, majd írassuk ki a mátrix sajátértékeit és sajátvektorait! Mátrixok, saját-vektorok és sajátértékek kiíratására pl. a következő szubrutin jól használható (matout.f):

*********************************************************************** subroutine matout(a,b,nc,nr,na,nb,np) *********************************************************************** implicit real*8 (a-h,o-z) implicit integer*4(i-n) dimension a(na,na),b(nb) ka=1 kc=5 1 kb=min0(kc,nc) if(np.ne.1) then write(*,'(/''no. '',i5,4i12)') (i,i=ka,kb) else write(*,'(/9x,i5,4i12)') (i,i=ka,kb) endif if(np.ne.1) write(*,'(/5x,5f12.5)') (b(i),i=ka,kb) write(*,'('' '')') n=0 do 3 i=1,nr write(*,'(i5,5f12.5)') i,(a(i,j),j=ka,kb) n=n+1 if(n.lt.5) goto 3 write(*,'('' '')') n=0 3 continue if(kb.eq.nc) return

Page 41: Computational Chemistry

Tasi Gyula: Számítógépes kémia

41

ka=kc+1 kc=kc+5 goto 1 end

A matout szubrutinban a write() utasítások már bonyolultabbak: formátum utasításokat tartalmaznak. Az np paraméter segítségével ( = 1 vagy ≠ 1) tudjuk szabályozni a kiíratás mennyiségét. Állapítsuk meg, hogy miként! Végül is programunkat következőképpen tudjuk lefordítani az Intel FORTRAN fordító segítségével:

>ifort –o diag.exe diag.f jacobi.f matout.f

Látható, hogy nem szükséges minden eljárást és adatot egy fájlban tárolnunk: a különböző eljárásokat különböző fájlokban tárolhatjuk. Ha valamelyik fájlról megfeledkezünk a fordítás során, a fordító program jelezni fogja a kérdéses eljárás(ok) hiányát.

A jacobi szubrutint alkalmazhatjuk mátrixok rangjának a meghatározására is (MK: 1-4.)! Az A mátrix teljesen tetszőleges lehet, mivel könnyen tudunk készíteni belőle szimmet-rikus kvadratikus mátrixot:

vagyT T A A A A A A

formában. Továbbá azt is tudjuk, hogy az A mátrix rangja megegyezik az eredeti A mátrix rangjával; sajátértékei nemnegatív valós számok, s ortogonális transzformációval diagonali-zálható. Ezeken túl az a legfontosabb tény, hogy az A mátrix pontosan annyi darab pozitív sajátértékkel rendelkezik, amennyi a meghatározni kívánt rang (MK: 1-4.).

Először is írjuk át úgy az előbbi diag.f főprogramot, hogy az képes legyen tetszőleges (téglalap alakú) valós mátrix beolvasására, majd állítsuk elő az A mátrixot, s oldjuk meg a közönséges sajátértékegyenletét! Az új főprogramunkat mentsük el rank.f néven:

*********************************************************************** program main *********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter (nmax=100) dimension a(nmax,nmax),d(nmax),x(nmax,nmax) dimension b(nmax,nmax),c(nmax,nmax) data eps,iord/1.d-10,1/ c c n: number of rows; m: number of columns c dim(a) = n x m (a rectangular matrix) c read(*,*) n,m do i=1,n read(*,*) (a(i,j),j=1,m) end do c c b = a^T: dim(b) = m x n c do i=1,m do j=1,n b(i,j)=a(j,i) end do end do c

Page 42: Computational Chemistry

Tasi Gyula: Számítógépes kémia

42

c Generation of a symmetric matrix c c = a * b c dim(c) = n x n c call matmult(a,b,c,nmax,n,m) call jacobi(c,nmax,n,d,x,eps,iord) call matout(x,d,n,n,nmax,nmax,2) end

A matmult szubrutin két általános mátrix szorzását hajtja végre a mátrixok szorzásának definíciója alapján. Az a tömb tartalmazza az eredeti mátrixot, a b az eredetinek a transzpo-náltját és a c pedig a kettő szorzatát. (A transzponált mátrix tárolására tulajdonképpen nincs is szükség: csak a jobb áttekinthetőség kedvéért tároljuk.)

c*********************************************************************** subroutine matmult(a,b,c,nmax,n,m) c*********************************************************************** c c c = a * b: dim(a) = n x m, dim(b) = m x n, dim(c) = n x n c implicit real*8(a-h,o-z) implicit integer*4(i-n) dimension a(nmax,nmax),b(nmax,nmax),c(nmax,nmax),arow(nmax) do i=1,n do k=1,m arow(k)=a(i,k) end do do j=1,n c(i,j)=0.d0 do k=1,m c(i,j)=c(i,j)+arow(k)*b(k,j) end do end do end do return end

A jacobi szubrutinnal most természetesen a szorzatmátrixot kell diagonalizálnunk. Oldjuk meg a 3.3 feladatot először papíron, majd számítógéppel!

Az elméleti kémiában a közönséges sajátértékegyenlet mellett gyakran találkozunk általá-nosított sajátértékegyenlettel is (MK: 1-4.):

( 1, 2, ),i i n i iHc Sc

ahol H és S n-edrendű hermitikus mátrixok: †H = H és . †S S (Rendszerint ezek valósak is, így valós szimmetrikus mátrixokkal állunk szemben: TH = H és . TS S ) Az S mátrix pozitív definit, azaz valamennyi sajátértéke pozitív, és gyakran metrikus mátrixnak nevezik az irodalomban. Ha 1S , akkor a H mátrix közönséges sajátértékegyenletéhez jutunk.

Általánosított mátrix sajátértékegyenlettel találkozunk például a kiterjesztett HÜCKEL-féle (EHT, Eng. Extended Hückel Theory) és az ab initio HARTREE-FOCK-ROOTHAN-HALL-féle (HFRH SCF, Eng. HFRH Self-Consistent Field Theory) kvantumkémiai módszerekben (lásd a 4. és a 14. projekteket). Az utóbbi esetben tovább bonyolítja a helyzetet, hogy a H márixnak megfelelő FOCK-mátrix függ a sajátfüggvényektől, azaz egy nemlineáris egyenletrendszert kell iteratíve megoldanunk.

Page 43: Computational Chemistry

Tasi Gyula: Számítógépes kémia

43

Az általánosított sajátértékegyenletek összességét felírhatjuk egyetlenegy mátrixegyenlet formájában is:

,HC SCE

ahol a C mátrix oszlopai az egyes sajátvektorok és E egy diagonális mátrix: ( ).iE diag Az általánosított sajátértékegyenletet LÖWDIN-féle szimmetrikus ortogonalizációs módszerrel közönséges sajátértékegyenletté alakíthatjuk [Löwdin, P.-O., J. Chem. Phys., 18, 365 (1950)]:

,i i iH c c

ahol , 1 12 2- -H S H S

12

i ic S c és ,i i azaz a sajátértékek megegyeznek az eredeti problé-ma sajátértékeivel. Megoldva a kapott közönséges sajátértékegyenletet, megkapjuk a sajátér-tékeket és inverz LÖWDIN-transzformációval az eredeti egyenlet sajátvektorait:

.12-

i ic S c

A transzformáláshoz szükséges 12-S mátrix következőképpen állítható elő. Mivel az S pozitív

definit hermitikus mátrix, ezért unitér transzformációval diagonalizálható:

( )i †V SV Λ diag

és 0.i Legyen (1 ),i12-Λ diag így

2 2( ) ( ) . 1 12 2- -Λ Λ Λ Λ 1

Fejezzük ki az S mátrixot a mátrix segítségével:

. †S VΛV

Definiáljuk az 12-S mátrixot következőképpen:

.1 12 2- - †S VΛ V

Ekkor 2

2

( )

( )

.

1 1 12 2 2

12

- - -† † †

- †

S S VΛV VΛ V VΛ V

VΛ Λ V

V V

1

Hasonlóan mutatható meg, hogy 2( ) .12-S S 1 Ez pedig azt jelenti, hogy 2( ) .

12--1S S Az

12-S

mátrix is hermitikus, ugyanis † †

( ) ( )

( )

.

1 12 2

12

12

12

- - †

- †

- †

-

S VΛ V

V Λ V

VΛ V

S

Most határozzuk meg a fentiekben felhasznált 12-S S mátrixszorzatot:

Page 44: Computational Chemistry

Tasi Gyula: Számítógépes kémia

44

,

1 12 2

12

12

12

- - † †

- †

S S VΛ V VΛV

VΛ ΛV

VΛ V

S

majd igazoljuk az 1 12 2-S S 1 összefüggést is:

.

1 1 1 12 2 2 2

1 12 2

- - † †

- †

S S VΛ V VΛ V

VΛ Λ V

V V

1

Hasonlóan láthatjuk be, hogy , 1 12 2S S 1 azaz ( ) .

1 12 2- -1S S

Először készítsünk egy szubrutint az 12-S mátrix előállítására (smhalf.f)! Az előzőek

szerint ennek érdekében meg kell oldanunk az S metrikus mátrix közönséges sajátérték-egyenletét.

************************************************************************ subroutine smhalf(n,nmax,eps,iord,s,x) ************************************************************************ * Subroutine SMHALF determines the eigenvalues and eigenvectors of the * * metric matrix (S), then determines the matrix S^-1/2 from them. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ * * S^-1/2 = V * (LAMBDA^-1/2) * (V^T) -> x = v * (d^-1/2) * vt * implicit real*8(a-h,o-z) implicit integer*4(i-n) dimension s(nmax,nmax),x(nmax,nmax) c c Better to perform dynamic allocations in some cases c allocatable :: v(:,:),vt(:,:),d(:),xt(:,:) allocate (v(nmax,nmax)) allocate (vt(nmax,nmax)) allocate (xt(nmax,nmax)) allocate (d(nmax)) c c Determination of the eigenvalues and eigenvectors of the metric matrix c call jacobi(s,nmax,n,d,v,eps,iord) c write(*,'(/5x,a)') & 'Eigenvalues and eigenvectors of matrix S' call matout(v,d,n,n,nmax,nmax,2) c c Computation of (d^-1/2) c do i=1,n

Page 45: Computational Chemistry

Tasi Gyula: Számítógépes kémia

45

do j=1,n x(i,j)=0.d0 end do end do do i=1,n x(i,i)=1.d0/dsqrt(d(i)) end do c c Determination of vt c do i=1,n do j=1,n vt(i,j)=v(j,i) end do end do c c Computation of x = v * (d^-1/2) * vt in two steps c call matmult(x,vt,xt,nmax,n,n) call matmult(v,xt,x,nmax,n,n) c write(*,'(/5x,a)') 'S^-1/2 matrix' call matout(x,d,n,n,nmax,nmax,1) deallocate (v,vt,xt,d) return end

Az smhalf szubrutinban néhány tömböt az eddig megszokott sztatikus allokáció (dimension, common) helyett dinamikusan foglalunk le a memóriában. Erre utalnak az allocatable, allocate() és a deallocate() utasítások. A FORTRAN 77 nyelv dinamikus allokációra nem nyújt lehetőséget, a FORTRAN 90 azonban igen. Ezt érdemes kihasználnunk FORTRAN 77 nyelven írt programjainkban is, mivel a memóriát fel tudjuk szabadítani, ha már a tömbökre nincs szükségünk. Jelen esetben persze ennek nincs nagy jelentősége, mivel a kérdéses 100 x 100-as tömbök nem foglalnak sok helyet a memóriában. Már csak a mátrixok beolvasására, a LÖWDIN-féle szimmetrikus ortogonalizáció végrehajtá-sára, a kapott közönséges sajátértékegyenlet megoldására, és végül az inverz LÖWDIN-transz-formáció alkalmazására van szükségünk. Ezt például a következő főprogrammal tudjuk megvalósítani (gdiag.f):

*********************************************************************** program main *********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter (nmax=100) dimension h(nmax,nmax),e(nmax),c(nmax,nmax) dimension s(nmax,nmax),x(nmax,nmax),xt(nmax,nmax) data eps,iord/1.d-10,1/ read(*,*) n do i=1,n read(*,*) (h(i,j),j=1,n) end do do i=1,n read(*,*) (s(i,j),j=1,n) end do c

Page 46: Computational Chemistry

Tasi Gyula: Számítógépes kémia

46

c Computation of matrix (S^-1/2) c call smhalf(n,nmax,eps,iord,s,x) c c Lowdin's symmetric orthogonalization c call matmult(h,x,xt,nmax,n,n) call matmult(x,xt,h,nmax,n,n) call jacobi(h,nmax,n,e,xt,eps,iord) write(*,'(/5x,a)') & 'Eigenvalues and eigenvectors of matrix H''' call matout(xt,e,n,n,nmax,nmax,2) c c Inverse Lowdin's transformation c call matmult(x,xt,c,nmax,n,n) write(*,'(/5x,a)') & 'Eigenvalues and eigenvectors of matrix H' call matout(c,e,n,n,nmax,nmax,2) end

A gdiag.exe végrehajtható program elkészítéséhez a következő utasítást kell kiadnunk:

>pgf90 –o gdiag.exe gdiag.f smhalf.f jacobi.f dot.f matmult.f matout.f

Arra kell ügyelnünk, hogy jelen esetben a dinamikus allokáció miatt FORTRAN 90-es fordítót használjunk: a FORTRAN 77-es fordító ugyanis hibát fog jelezni. Látható, hogy a FORTRAN 90-es fordító lehetővé teszi a kevert FORTRAN nyelvű programozást is!

Feladatok: 3.1 Határozza meg az alábbi mátrix sajátértékeit és sajátvektorait a jacobi szubrutin segítségével:

120 80 40 16

80 120 16 40.

40 16 120 80

16 40 80 120

A

Mutassa meg, hogy a sajátvektorok ortogonálisak egymásra! Ehhez fel tudja használni az 1. projekt double precision function dot(x,y,n) függvényét.

3.2 Határozza meg a következő mátrix sajátértékeit és sajátvektorait!

1 1 0 1

1 1 1 0.

0 1 1 1

1 0 1 1

3.3 Határozza meg az alábbi mátrix rangját:

Page 47: Computational Chemistry

Tasi Gyula: Számítógépes kémia

47

1 3 2

0 1 2

1 1 6

2 5 6

A

3.4 Egy adott reakciórendszerben a következő kémiai komponenseket tudjuk kimutatni:

4CH , 2O , CO, 2H , 2H O és 2CO . Az alábbi reakciólépéseket feltételezve határozza meg az algebrailag független reakciók számát:

4 2 2

4 2 2

4 2 2 2

4 2 2 2

2 2 2

2 CH + O 2 CO + 4 H

CH + H O CO + 3 H

CH + 2 H O CO + 4 H

CH + 2 O CO + 2 H O

CO + H O H + CO .

3.5 Állítsa elő az 1,3-butadién-molekula konnektivitási (összekötési, topológiai) mátrixát, és határozza meg annak a sajátértékeit és a sajátvektorait! A konnektivitási mátrix felépítésénél csak a nehézatomokat (hidrogénnél nagyobb rendszámú elemek) vegye figyelembe. A kon-nektivitási mátrix ij-ik eleme 1, ha az i és a j atom kapcsolódik egymáshoz (kötésben van egymással), egyébként nulla. Milyen kapcsolat van a konnektivitási és a HÜCKEL-mátrix között?

3.6 Állítsa elő az ciklobutadién-molekula konnektivitási mátrixát, és határozza meg annak a sajátértékeit és a sajátvektorait! A konnektivitási mátrix felépítésénél csak a nehézatomokat vegye figyelembe. Miben különbözik az 1,3-butadién-molekula konnektivitási mátrixa a ciklobutadiénétől?

3.7 Állítsa elő a benzolmolekula konnektivitási mátrixát, és határozza meg annak a sajátérté-keit és a sajátvektorait! A konnektivitási mátrix felépítésénél csak a nehézatomokat vegye figyelembe.

3.8 Állítsa elő a naftalin-molekula konnektivitási mátrixát, és határozza meg annak a saját-értékeit és a sajátvektorait! A konnektivitási mátrix felépítésénél csak a nehézatomokat vegye figyelembe. A molekula méretének növekedésével egyre fárasztóbb a konnektivitási mátrix kézzel történő előállítása, így érdemes azt is a számítógépre bízni. Írjon egy programot, ami megkönnyíti nagy molekulák esetén a konnektivitási mátrix előállítását!

3.9 Oldja meg a következő általánosított mátrix sajátértékegyenletet:

( 1, , 4),i i i iFc Sc

ahol -0.38004 -0.44025 -0.60113 -0.44493

-0.44025 -0.25390 -0.44493 -0.27044;

-0.60113 -0.44493 -0.38004 -0.44025

-0.44493 -0.27044 -0.44025 -0.25390

F

Page 48: Computational Chemistry

Tasi Gyula: Számítógépes kémia

48

1.00000 0.75899 0.65932 0.65723

0.75899 1.00000 0.65723 0.90665.

0.65932 0.65723 1.00000 0.75899

0.65723 0.90665 0.75899 1.00000

S

A kérdéses probléma megoldásával megkapjuk a hidrogén-molekula HFRH SCF molekula-pályáit és pályaenergiáit. A számításokat 1.4 bohr mag-mag távolságnál, a POPLE-féle 3-21G “split-valence” bázist használva végeztük (lásd a 14. projektet).

3.10 Az irodalom szerint a perjodát- és a jodidionok következő mechanizmus szerint reagál-nak egymással gyengén savas vizes közegben [Horváth, A.K.: Pitfall of an Initial Rate Study: On the Kinetics and Mechanism of the Reaction of Periodate with Iodide Ions in a Slightly Acidic Medium, J. Phys. Chem. A, 111, 890 (2007)]:

24 2 4I IO I O ;

22 4 2 2I O H H O 2HIO OH ;

22 4 2 2 3I O I H O I IO 2OH ;

2HIO I H 2HOI;

2 4 3HIO IO 2IO H ;

2 2I H O HOI I H ;

2 3I I I ;

3 2 2IO 5I 6H 3I 3H O.

Határozza meg az adott reakciórendszer (R = 10; K = 11) sztöchiometriai mátrixának a rang-ját (MK: 1-4. és MK: 2-6.)!

Page 49: Computational Chemistry

Tasi Gyula: Számítógépes kémia

49

4. A HÜCKEL-féle molekulapálya (HMO) módszer és módosításai Erich HÜCKEL (német fizikus, 1896-1980) a fizikai kémia több ágában maradandót alko-

tott. Egyetemi hallgatóként Peter DEBYE irányítása alatt dolgozott Göttingenben, majd rövid ideig David HILBERT és Max BORN munkatársa volt. Később HÜCKEL követte egyetemi mentorát, DEBYE-t Zürichbe, ahol elkészítette disszertációját az erős elektrolitok híres DEBYE-HÜCKEL-elméletéről. HÜCKEL 1927 után kutatóként hosszabb-rövidebb időt töltött Londonban, Koppenhágában (N. BOHR) és Lipcsében (W. HEISENBERG és F. HUND). Mivel Stuttgartban nem fogadták el a Zürichben készített disszertációját, egy új disszertációt kellett írnia: “A kvantummechanika hozzájárulása a benzolmolekula problémájához”. Ez a munkája néhány további cikkel kiegészítve reprezentálja HÜCKEL legfontosabb hozzájárulását a tudományhoz.

A HÜCKEL-féle molekulapálya módszer (HMO, Eng. Hückel Molecular Orbital Theory) a legelső kvantumkémiai módszer, mellyel rutinszerűen lehet kvantumkémiai számításokat végezni nagy konjugált molekulákra [E. Hückel, Z. Physik, 70, 204 (1931)].

Andreas KARACHALIOS 2010-ben a Springer kiadó gondozásában könyvet jelentetett meg HÜCKEL életéről és munkásságáról: Erich Hückel (1896-1980): From Physics to Quantum Chemistry, Springer Science+Business Media, Dordrecht (2010). Érdemes elolvasni Werner KUTZELNIGG híres német elméleti kémikus HÜCKEL-elméletről írt esszéjét is: What I like About Hückel Theory, J. Comput. Chem., 28, 25-34 (2007).

A HMO-módszer a számítások során csak egy atompályát (AO, Eng. Atomic Orbital) vesz figyelembe atomonként, s eltekint az elektrosztatikus kölcsönhatások explicit figyelem-bevételétől. Annak ellenére, hogy a HÜCKEL-módszer igen egyszerű, ma sem tekinthető telje-sen elavultnak. Ha a módszerrel valamilyen kérdésre egyértelmű kvalitatív választ kapunk, akkor a kapott kép általában nem változik lényegesen magasabbrendű kvantumkémiai mód-szerek használata esetén sem. Különösen igaz ez az állítás szénhidrogén-molekulákra. A heteroatomok kezelése a módszeren belül bizonytalanabb. A HMO-módszer pedagógiai szempontból is fontos: ez a módszer tekinthető az LCAO-MO módszerek (Eng. Linear Combinations of Atomic Orbitals – Molecular Orbital) ősének.

Konjugált kettőskötéseket tartalmazó planáris molekulák molekulapályái aszerint osztá-lyozhatók, hogy a molekula síkjára való tükrözésre szimmetrikusak (σ-pályák) vagy anti-szimmetrikusak (π-pályák). π-elektronoknak nevezzük a π-pályákon, míg σ-elektronoknak a σ-pályákon levő elektronokat. A HMO elmélet első feltevése az, hogy a π-elektronok függet-lenül kezelhetők a σ-elektronoktól (σ-π szeparáció). Ez a szeparáció azon a kísérleti tapasz-talaton nyugszik, hogy a konjugált rendszerek kémiai tulajdonságai és elektronabszorpciós spektrumai kielégítően értelmezhetők a függetlenrészecske π-elektron modell alapján. Ebben a közelítésben a σ-kötések egy többé-kevésbé merev váznak tekinthetők, amely felett a π-elektronok mozognak. Ennek megfelelően a függetlenrészecske π-elektron modell végül is azt jelenti, hogy a π-elektronok az atommagok és a σ-elektronok által generált elektroszta-tikus potenciáltérben mozognak.

Page 50: Computational Chemistry

Tasi Gyula: Számítógépes kémia

50

A i molekulapályákat és az i

pályaenergiákat a H HÜCKEL-mátrix közönséges saját-

értékegyenletének a megoldása révén kapjuk meg (MK: 1-4.). A i molekulapályákat

formálisan a konjugált atomok π-szimmetriájú atompályáinak i lineáris kombinációja-

ként állítjuk elő:

1

,n

i ki kk

c

ahol n a π-szimmetriájú atompályák száma. A i halmazhoz (ún. bázishoz) az sp2 hibridi-

zációjú szénatomok és a konjugációban résztvevő heteroatomok egy-egy π-szimmetriájú atompályával járulnak hozzá. Ha a molekula síkja az xy-sík, akkor a kérdéses pályák C, N, O, F elemek esetén a 2pz, míg Si, P, S, Cl elemek estén pedig a 3pz atompályák. A HÜCKEL-féle módszerben tulajdonképpen nincs szükség az atompályák analitikus alakjára. Minden szénatom a π-elektronrendszerhez egy π-elektront ad, a heteroatomok egyet vagy kettőt. A π-elektronokat a i

molekulapályákon párosával és ellentett spinnel (α és β spinfüggvények)

helyezzük el. A H mátrix elemeire vonatkozó HÜCKEL-féle előírások: Hii = αi; Hij = βij, ha az i és a j

atomok szomszédosak (klasszikus értelemben kötésben vannak egymással) és Hij = 0, ha az i és a j atomok nem szomszédosak. Az αi elemeket COULOMB-integráloknak, a βij-ket pedig rezonancia-integráloknak nevezzük. Míg az αi COULOMB-integrál az i-ik AO-hoz tartozó elektron maghoz való kötődési erősségére jellemző paraméter, addig a βij rezonancia-integrál az i-ik és a j-ik AO-khoz tartozó elektronok (kötési) kölcsönhatásának erősségét jellemzi. Szénatomok esetén az αi és a βij paramétereket általában azonosaknak tételezik fel: i és ij . Például az 1,3-butadién-molekula HÜCKEL-mátrixa:

0 0

0

0

0 0

H

A H mátrix valós és szimmetrikus, továbbá tridiagonális. Közönséges sajátértékegyenlete analitikusan és a JACOBI-féle módszerrel numerikusan is könnyen megoldható.

További egyszerűsítésként szénatomok esetén az α-t általában nullával teszik egyenlővé. Ez lesz a HMO-diagramunk zérus szintje. A HÜCKEL-mátrix β egységekben felírva azonos a molekula szénatomjainak konnektivitását (az atomok kapcsolódását) leíró ún. kon-nektivitási (topológiai) mátrixszal. Az 1,3-butadién-molekula konnektivitási mátrixa (lásd a 3.2 feladatot):

0 1 0 0

1 0 1 0

0 1 0 1

0 0 1 0

A HÜCKEL-mátrix előállításához tehát csak a molekula szerkezeti képletére és heteroato-mok esetén az α és a β paraméterekre van szükségünk. A HMO-módszer matematikai forma-

Page 51: Computational Chemistry

Tasi Gyula: Számítógépes kémia

51

lizmusában az atomi koordináták explicite nem jelennek meg: csak a molekula konnektivitási mátrixa által meghatározott molekuláris topológia ismeretére van szükség.

A molekula teljes -elektronenergiája (Eng. electron energy):

1

,n

i ii

E

ahol n a -MO-k száma, s i megadja, hogy az i-ik -MO mennyi elektront tartalmaz (betöl-töttségi szám, Eng. occupation number); lehetséges értékei 0, 1 és 2.

Konjugált molekulák sok olyan tulajdonsággal rendelkeznek, amelyek nem közvetlenül a -MO-kkal, hanem a belőlük származtatott π-elektronpopulációkkal (Eng. electron population), kötésrendekkel (Eng. bond order) és szabad vegyértékekkel (Eng. free valence) hozhatók kapcsolatba.

Ha a π-elektronok ρπ(r) elektronsűrűségét (Eng. electron density) a teljes térre integráljuk, akkor a π-elektronok számát kell megkapnunk:

( ) .d n r r

A i MO-k segítségével következőképpen tudjuk a π-elektronsűrűséget előállítani:

2

1 1 1 1

1 1 1 1 1

( )

.

n n n n

i i i ki li k li i k l

n n n n n

i ki li k l kl k lk l i k l

c c

c c P

r

A 2

i i az i-ik MO-nak megfelelő π-elektronsűrűség. A P = {Pkl} mátrixot elsőrendű

sűrűségmátrixnak (Eng. first-order density matrix) nevezzük:

1 1

,n occ

kl i ki li i ki lii i

P c c c c

ahol occ azt jelenti, hogy az összegzést csak az alsó, betöltött (occ = occupied) -MO-kra kell végrehajtanunk. A P mátrix régebbi elnevezése: töltés-kötésrend-mátrix (Eng. charge-bond order matrix) ill. kötésrend-mátrix (Eng. bond order matrix), mivel Pkk a k atom π-elektron-populációja és Pkl a k és az l atomot összekötő π-kötés erősségére jellemző kötésrend. Integ-ráljuk a π-elektronok sűrűségét a teljes térre:

1 1 1 1

1 1 1

( )

,

n n n n

kl k l kl k lk l k l

n n n

kl kl kkk l k

d P d P

P P n

r r r

ahol Pkk a k atom π-elektronpopulációja. A k atom Fk szabad π-vegyértéke: Fk = Vmax Vk, ahol

max 3;

.k kll k

V

V P

Page 52: Computational Chemistry

Tasi Gyula: Számítógépes kémia

52

A Vmax értékét a trimetilénmetánra végzett számítások alapján határozták meg. A Vk számí-tásánál csak a szomszédos atomokat vesszük figyelembe. A szabad vegyértékek a molekula szabad gyökökkel való reaktivitását jellemzik.

Az alábbiakban a jacobi szubrutin felhasználásával egy FORTRAN nyelvű programot adunk meg a HMO-számítások elvégzésére. A programban a nehéz atomok (a hidrogénnél nehezebb atomok) maximális száma 30 (parameter (nmax=30)). Ez természetesen egyszerűen módosítható: csak az nmax értékét kell megváltoztatnunk. A program jelenlegi formában csak párosával betöltött -MO-kkal rendelkező ún. zárt héjú (Eng. closed shell) molekulákat kezel. Ezt a korlátot egy kis programozási munkával azonban könnyen megszün-tethetjük. A program bemenő adatai: molec a molekula neve, n a nehéz atomok száma, m a kétszeresen betöltött -MO-k száma, nbond a kötések száma, i,j a kötésben levő nehéz atomok sorszámai (nbond darab). A hmat szubrutinban először a molekula konnektivitását leíró konekt tömböt állítjuk elő. Ennek generálásához csak a kötések számát, s az egymás-sal kapcsolódó atomok sorszámát kell megadni. A HÜCKEL-mátrixot a konekt tömbből állíthatjuk elő: huck(i,j) = dble(konekt(i,j)), hiszen a β paraméterek negatí-vak. (A dble() FORTRAN könyvtári függvény integer > real*8 konverziót hajt végre.) Lehetőség van a HÜCKEL-mátrix elemeinek a módosítására is. Erre pl. heteroatomok esetén van szükség. A jacobi szubrutin segítségével diagonalizáljuk a huck mátrixot, majd a pmat szubrutinban meghatározzuk a P mátrix elemeit, s a freev szubrutinban a szabad vegyértékeket. A számítási eredményeket a matout szubrutin segítségével nyomtat-juk ki.

************************************************************************ program main ************************************************************************ * Program HMO performes HMO computations on molecules. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8(a-h,o-z) character molec*20 parameter (nmax=30) dimension huck(nmax,nmax),eigval(nmax),eigvec(nmax,nmax) dimension p(nmax,nmax),fv(nmax),konekt(nmax,nmax) data eps,iord /1.0d-10,1/ write(*,'(a)') 'Molecule: ' read(*,'(a)') molec write(*,'(''Molecule: '',a20)') molec call hmat(n,m,huck,konekt) write(*,'(/a)') ' Huckel matrix' call matout(huck,eigval,n,n,nmax,nmax,1) call jacobi(huck,nmax,n,eigval,eigvec,eps,iord) write(*,'(//a)') ' Eigenvalues & eigenvectors of Huckel matrix' call matout(eigvec,eigval,n,n,nmax,nmax,2) call pmat(n,m,eigvec,p) write(*,'(//a)') ' First-order density matrix' call matout(p,eigval,n,n,nmax,nmax,1) call freev(n,p,fv,huck,konekt)

Page 53: Computational Chemistry

Tasi Gyula: Számítógépes kémia

53

sum=0.d0 do j=1,m sum=sum+eigval(j) end do sum=2.d0*sum write(*,'(/'' Total pi-electron energy ='',f10.4)') sum write(*,'(/a)') ' Pi-electron populations' write(*,'(/4x,5f10.4)') ((p(i,j),i=j,j),j=1,n) write(*,'(/a)') ' Free valences' write(*,'(/4x,5f10.4)') (fv(i),i=1,n) end ************************************************************************ subroutine hmat(n,m,huck,konekt) ************************************************************************ implicit real*8(a-h,o-z) parameter (nmax=30,maxb=100) dimension huck(nmax,nmax),konekt(nmax,nmax) dimension ia(maxb),ib(maxb) write(*,'(a)') 'Number of heavy atoms: ' read(*,*) n write(*,'(a,i3)') 'Number of heavy atoms: ',n write(*,'(a)') 'Number of doubly occupied MOs: ' read(*,*) m write(*,'(a,i3)') 'Number of doubly occupied MOs: ',m write(*,'(a)') 'Number of bonds: ' read(*,*) nbond write(*,'(a,i3)') 'Number of bonds: ',nbond do i=1,nbond c write(*,'(a,i3,a)') 'Bond',i,' atoms [i,j]: ' read(*,*) ia(i),ib(i) write(*,'(a,i3,a,i3,a1,i3)') $ 'Bond #',i,': atoms ',ia(i),'-',ib(i) end do do i=1,n do j=1,n konekt(i,j)=0 end do end do do i=1,nbond i1=ia(i) i2=ib(i) konekt(i1,i2)=1 konekt(i2,i1)=1 end do do j=1,n do i=1,n huck(i,j)=-dble(konekt(i,j)) end do end do write(*,'(/a)') 'Modify Huckel matrix [yes=1,no=0]: ' read(*,*) mod if(mod.eq.1) then write(*,'(a)') 'Number of elements to be modified: ' read(*,*) nmod do i=1,nmod write(*,'(a)') 'atoms [i,j] & parameter: ' read(*,*) i1,i2,param huck(i1,i2)=param if(i1.ne.i2) huck(i2,i1)=huck(i1,i2)

Page 54: Computational Chemistry

Tasi Gyula: Számítógépes kémia

54

end do endif return end ************************************************************************ subroutine pmat(n,m,c,p) ************************************************************************ implicit real*8(a-h,o-z) parameter (nmax=30) dimension c(nmax,nmax),p(nmax,nmax) do i=1,n do j=1,n p(i,j)=0.d0 end do end do do i1=1,n do i2=1,i1 sum=0.d0 do j=1,m sum=sum+c(i1,j)*c(i2,j) end do p(i1,i2)=2.d0*sum p(i2,i1)=2.d0*sum end do end do return end ************************************************************************ subroutine freev(n,p,fv,a,konekt) ************************************************************************ implicit real*8(a-h,o-z) parameter (nmax=30) dimension p(nmax,nmax),fv(nmax),a(nmax,nmax),konekt(nmax,nmax) do k=1,n vk=0.d0 do 10 l=1,n if(l.eq.k) goto 10 if(konekt(k,l).ne.0) vk=vk+p(k,l) 10 continue fv(k)=1.732d0-vk end do return end

Az első példánk legyen az 1,3-butadién-molekula. A molekulában a szénatomok száma négy (n=4); a kétszeresen betöltött π-MO-k száma kettő (m=2); a szénatomok közötti köté-sek száma három (nbond=3). Az egymással kötésben levő szénatomok sorszámai rendre: 1,2; 2,3; 3,4. A HMO programmal végzett futás eredménye:

Molecule: 1,3-butadiene Number of heavy atoms: 4 Number of doubly occupied MOs: 2 Number of bonds: 3 Bond # 1: atoms 1- 2 Bond # 2: atoms 2- 3 Bond # 3: atoms 3- 4 Huckel matrix

Page 55: Computational Chemistry

Tasi Gyula: Számítógépes kémia

55

1 2 3 4 1 0.00000 -1.00000 0.00000 0.00000 2 -1.00000 0.00000 -1.00000 0.00000 3 0.00000 -1.00000 0.00000 -1.00000 4 0.00000 0.00000 -1.00000 0.00000 Eigenvalues & eigenvectors of Huckel matrix no. 1 2 3 4 -1.61803 -0.61803 0.61803 1.61803 1 0.37175 -0.60150 0.60150 0.37175 2 0.60150 -0.37175 -0.37175 -0.60150 3 0.60150 0.37175 -0.37175 0.60150 4 0.37175 0.60150 0.60150 -0.37175 First-order density matrix 1 2 3 4 1 1.00000 0.89443 0.00000 -0.44721 2 0.89443 1.00000 0.44721 0.00000 3 0.00000 0.44721 1.00000 0.89443 4 -0.44721 0.00000 0.89443 1.00000 Total pi-electron energy = -4.4721 Pi-electron populations 1.0000 1.0000 1.0000 1.0000 Free valences 0.8376 0.3904 0.3904 0.8376

A molekula π-elektronenergiája: Eπ = 4.472 (4α + 4.472β). A négy MO közül a két legalsó kétszeresen betöltött (kötő -MO-k), a további kettőn viszont nincsenek elektronok (lazító -MO-k). Ha a -MO energiaszintje α, akkor nemkötő, míg, ha nagyobb, mint α, akkor lazító pályáról beszélünk. Az etilénmolekulára is elvégezve a számítást, megkapjuk a lokalizált kettőskötés π-elektronenergiáját: Eπ = 2.000 (2α + 2β). Ha levonjuk az 1,3-butadién-mole-kula π-elektronenergiájából a két lokalizált kettőskötésnek megfelelő energiát, akkor megkap-juk a molekulának a π-elektronok delokalizációjából származó stabilizációs energiáját (delo-kalizációs energia): ΔE = 0.472 (0.472β). A szénatomok közötti π-kötésrendek: C1-C2: 0.894, C2-C3: 0.447 és C3-C4: 0.894. A teljes π-kötésrend 2.235, ami nagyobb a klasszikus szerkezeti képlet alapján várt 2 értéknél. A centrális szénatomok közötti π-kötésrend 0.447, ami magyarázatot szolgáltat a kérdéses kötés “kettőskötés” jellegére. A centrális kötés hossza a szokásos C-C kötés és az C=C kötés hossza közé esik. A ciklobutadién-molekulára elvégez-ve a HMO-számítást, a delokalizációs energia értékére nullát kapunk, azaz a kettőskötések lokalizáltak a molekulában.

Page 56: Computational Chemistry

Tasi Gyula: Számítógépes kémia

56

Az egyes π-MO-knak megfelelő elektronsűrűségeket ábrázolhatjuk. Ennek érdekében csak az atompályák analitikus alakját kell megválasztanunk. Erre a HÜCKEL-féle számítások elvégzéséhez természetesen nincs szükség. Válasszuk a szénatom 2pz pályáját SLATER-típusúnak (MK: F.2-4.). A 2pz SLATER-pályát definiáló kvantumszámok: n = 2, l = 1 és m = 0. Az egyszerűség kedvéért a pályakitevő értéke legyen 1.0. Az etilén-molekula kötő (α+β) és lazító (αβ) pályájának megfelelő elektronsűrűségek szintvonalas ábrázolásban: A kérdéses sík a molekulasíkkal párhuzamos és 10 pm-rel van felette. A szintvonalakhoz tar-tozó értékek: 10-5 atomi egység.) Megfigyelhető, hogy a kötő pálya növeli az elektronsűrű-séget a kötésben levő atomok között azáltal, hogy mindkét szénatomra kiterjed. A -váz az egyedüli csomósík (0 az elektronsűrűség értéke). A lazító pálya esetén az elektronsűrűségek az egyes atomokra koncentrálódnak: a szénatomok között kicsi az elektronsűrűség. A C=C kötés felezőpontján átmenő, a kötésre merőleges sík csomósík.

Az 1,3-butadién-molekula π-MO-inak megfelelő elektronsűrűségeket a következő ábrá-kon mutatjuk be:

A kérdéses sík a szénatomok által meghatározott síkkal párhuzamos és 10 pm-rel van felette. A szintvonalakhoz tartozó értékek: 10-5 atomi egység. Az 1. kötő pálya esetén a π-

Page 57: Computational Chemistry

Tasi Gyula: Számítógépes kémia

57

elektronok teljesen delokalizáltak a négy szénatomra (egyedüli csomósík a -váz). Látható, hogy a kérdéses pálya a centrális C2-C3 szénatomok között nagyobb elektronsűrűséget eredményez, mint a láncvégi C1-C2 és C3-C4 szénatomok között. A két π-elektronnal betöltött 2. kötő pálya erős π-kötést létesít a láncvégi szénatomok között. A központi szénatomok között ez a pálya nem hoz létre π-kötést (2 csomósík). A 3. és a 4. lazító pályák esetén feltételezve, hogy azok kétszeresen betöltöttek a szénatomok között gyakorlatilag zérus a π-elektronsűrűség, azaz nem létesítenek π-kötést (3 és 4 csomósík).

Legyen a következő példánk a benzolmolekula (n=6, m=3, nbond=6). Az egymással kötésben levő szénatomok sorszámai rendre: 1,2; 2,3; 3,4; 4,5; 5,6; 6,1. A HMO programmal végzett futás eredménye:

Molecule: Benzene Number of heavy atoms: 6 Number of doubly occupied MOs: 3 Number of bonds: 6 Bond # 1: atoms 1- 2 Bond # 2: atoms 2- 3 Bond # 3: atoms 3- 4 Bond # 4: atoms 4- 5 Bond # 5: atoms 5- 6 Bond # 6: atoms 6- 1 Huckel matrix 1 2 3 4 5 1 0.00000 -1.00000 0.00000 0.00000 0.00000 2 -1.00000 0.00000 -1.00000 0.00000 0.00000 3 0.00000 -1.00000 0.00000 -1.00000 0.00000 4 0.00000 0.00000 -1.00000 0.00000 -1.00000 5 0.00000 0.00000 0.00000 -1.00000 0.00000 6 -1.00000 0.00000 0.00000 0.00000 -1.00000 6 1 -1.00000 2 0.00000 3 0.00000 4 0.00000 5 -1.00000 6 0.00000 Eigenvalues & eigenvectors of Huckel matrix no. 1 2 3 4 5 -2.00000 -1.00000 -1.00000 1.00000 1.00000 1 0.40825 -0.56129 0.13523 0.54736 0.18367 2 0.40825 -0.39776 -0.41847 -0.43274 0.38219 3 0.40825 0.16353 -0.55371 -0.11461 -0.56586 4 0.40825 0.56129 -0.13523 0.54736 0.18367 5 0.40825 0.39776 0.41847 -0.43274 0.38219 6 0.40825 -0.16353 0.55371 -0.11461 -0.56586 no. 6 2.00000 1 0.40825 2 -0.40825

Page 58: Computational Chemistry

Tasi Gyula: Számítógépes kémia

58

3 0.40825 4 -0.40825 5 0.40825 6 -0.40825 First-order density matrix 1 2 3 4 5 1 1.00000 0.66667 0.00000 -0.33333 0.00000 2 0.66667 1.00000 0.66667 0.00000 -0.33333 3 0.00000 0.66667 1.00000 0.66667 0.00000 4 -0.33333 0.00000 0.66667 1.00000 0.66667 5 0.00000 -0.33333 0.00000 0.66667 1.00000 6 0.66667 0.00000 -0.33333 0.00000 0.66667 6 1 0.66667 2 0.00000 3 -0.33333 4 0.00000 5 0.66667 6 1.00000 Total pi-electron energy = -8.0000 Pi-electron populations 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 Free valences 0.3987 0.3987 0.3987 0.3987 0.3987 0.3987

Látható, hogy a 1.000 és a +1.000 sajátértékek kétszeresen degeneráltak. Ennek megfe-lelően két-két azonos energiaszintű kötő és lazító pályánk lesz. A rendszer teljes π-elektron-energiája: Eπ = 8.000 (6α + 8β). A π-elektronok delokalizációjából származó stabilizációs energia: ΔE = 2.000 (2β). Az 1,3-butadién-molekula delokalizációs energiájával összevetve a benzolét, látható, hogy a benzolmolekula esetén a π-elektronok delokalizációja nagyobb mértékű. A szénatomok π-kötésrendje 0.667, ami azt jelenti, hogy egy szénatom esetén a kötések száma 4.334. A hat szénatomra jutó kötésrendtöbblet 2.004.

A HÜCKEL-módszer igen vonzó tulajdonsága, hogy sok következtetés levonásához nem szükséges megadnunk az α és a β paraméterek értékét. Ha azonban pontosabb kvantitatív eredményeket akarunk, akkor a számításukra vonatkozó szabályokat deklarálnunk kell. Ez igen gyakran problémákhoz vezet: egymástól távoleső tulajdonságokra reális eredményeket akkor kapunk, ha különböző paramétereket alkalmaznunk. Ennek következtében a paramé-terek megválasztásánál kompromisszumra kell törekednünk. A benzol kísérletileg megha-tározott égéshőjéből például meghatározható β értéke. Az így kapott érték 18 kcal/mol. Az α értéke pedig a benzol első kísérleti ionizációs potenciáljából (9.21 eV = 212 kcal/mol) becsülhető. Ez az energia első közelítésben ahhoz szükséges, hogy a legmagasabb kötő

Page 59: Computational Chemistry

Tasi Gyula: Számítógépes kémia

59

pályáról (HOMO, Eng. Highest Occupied MO) egy elektront távolítsunk el: α + β = 212 kcal/mol, azaz α = 194 kcal/mol.

Szénhidrogénmolekulák esetén is tökéletesíthető a HMO-modell. Először is figyelembe vehetjük β-nak a szén-szén-kötés típusától való függését. R. S. MULLIKEN (1896-1986, kémiai Nobel-díj 1966-ban) SLATER-pályákat alkalmazva számolta a βij integráloknak az

ij i jS átfedési integráloktól való függését. Az eredmények azt mutatták, hogy a βij

közel lineáris függvénye az Sij-nek. Ha a benzolmolekula (dCC = 1.397 Å) esetén számított β-értéket vesszük referenciának (β0), akkor a 0k kifejezésben k értéke dCC = 1.33 Å esetén

1.11 és dCC = 1.45 Å esetén 0.91. Ezen megfontolásokat is figyelembe véve, végezzük el a HMO-számítást az 1,3-butadién-

molekulára! A HÜCKEL-mátrix következő elemeit kell módosítanunk: H(1,2) = 1.1, H(2,3) = 0.9 és H(3,4) = 1.1. Természetesen a HÜCKEL-mátrix szimmetrikus volta miatt a 2,1; a 3,2 és a 4,3 elemeket is módosítanunk kell. Ezt a program automatikusan elvégzi. A delokalizá-ciós energia 00.472 helyett 00.354 -nak adódik, ami azt jelenti, hogy a π-elektronok tényleges delokalizációja kisebb mértékű annál, amit az eredeti modell alapján kaptunk. Hasonlóan az α paraméter értéke is függ az atom π-elektronpopulációjától, az atom nettó töltésétől. Az ún. ω-módszer a következő összefüggést alkalmazza:

1 ,i iiP

ahol α és β a kiindulási értékek. Az ω faktor értékére 1.4-et javasoltak. Az eljárás során először egy normális HMO-számítást végzünk, majd az α paraméterek értékét a kérdéses egyenletnek megfelelően módosítjuk. Ezután a módosított HÜCKEL-mátrixot diagonalizáljuk. Az előbbi lépéseket iteratíve addig folytatjuk, amíg az atomi π-elektronpopulációk nem változnak (töltés-önkonzisztencia, Eng. charge self-consistency). Az ω-módszerrel szerves kationok esetén jobb energiaértékeket kaptak, mint az eredeti HMO-módszerrel. A további részletek a szakirodalomban megtalálhatók: G. Doggett, A study of the -technique as applied to unsaturated hydrocarbons, Molecular Physics, 10, 225 (1966).

Heteroatomok esetén módosítanunk kell az és a paraméterek értékét:

X 0 X 0;h

XY XY 0 ,k

ahol 0 és 0 a benzolra jellemző értékek. A heteroatomok egy-egy π-szimmetriájú atom-pályával és egy vagy két -elektronnal járulnak hozzá a konjugált rendszerhez. Az előző-ekben már említettük, hogy ha a molekula síkja az xy-sík, akkor a kérdéses pályák N, O, F elemek esetén a 2pz, míg Si, P, S, Cl elemek estén pedig a 3pz atompályák. Az irodalomban a következő értékeket találhatjuk a paraméterekre:

X

X N N N O O O Cl F

0.5 1.5 2.0 1.0 2.0 2.5 2.0 3.0h

XY

XY C N C N N O C C C = C Cl C F

1.0 0.8 0.7 1.0 0.8 1.0 0.4 0.7k

Page 60: Computational Chemistry

Tasi Gyula: Számítógépes kémia

60

Végezzünk példaként HMO-számítást a piridin-molekulára (n=6, m=3, nbond=6)! Az egymással kötésben levő atomok sorszámai rendre: 1,2; 2,3; 3,4; 4,5; 5,6; 6,1. Legyen az 1. atom a nitrogénatom, így ennek megfelelően kell megváltoztatnunk a paramétereket: H(1,1) = 0.5, H(1,2) = 1.0 és H(1,6) = 1.0. (Az utóbbi kettő értéke a benzolhoz képest válto-zatlan, így ténylegesen nem kell őket megváltoztatnunk.) A HMO-számítás eredménye:

Molecule: pyridine Number of heavy atoms: 6 Number of doubly occupied MOs: 3 Number of bonds: 6 Bond # 1: atoms 1- 2 Bond # 2: atoms 2- 3 Bond # 3: atoms 3- 4 Bond # 4: atoms 4- 5 Bond # 5: atoms 5- 6 Bond # 6: atoms 6- 1 Modify Huckel matrix [yes=1,no=0]: 1 Number of elements to be modified: 1 Atoms [i,j] & parameter: 1,1,-0.5 Huckel matrix 1 2 3 4 5 1 -0.50000 -1.00000 0.00000 0.00000 0.00000 2 -1.00000 0.00000 -1.00000 0.00000 0.00000 3 0.00000 -1.00000 0.00000 -1.00000 0.00000 4 0.00000 0.00000 -1.00000 0.00000 -1.00000 5 0.00000 0.00000 0.00000 -1.00000 0.00000 6 -1.00000 0.00000 0.00000 0.00000 -1.00000 6 1 -1.00000 2 0.00000 3 0.00000 4 0.00000 5 -1.00000 6 0.00000 Eigenvalues & eigenvectors of Huckel matrix no. 1 2 3 4 5 -2.10745 -1.16719 -1.00000 0.84096 1.00000 1 0.52071 -0.57137 0.00000 0.54591 0.00000 2 0.41850 -0.19061 -0.50000 -0.36602 -0.50000 3 0.36127 0.34890 -0.50000 -0.23810 0.50000 4 0.34285 0.59784 0.00000 0.56626 0.00000 5 0.36127 0.34890 0.50000 -0.23810 -0.50000 6 0.41850 -0.19061 0.50000 -0.36602 0.50000 no. 6 1.93368 1 -0.32307 2 0.39313 3 -0.43711 4 0.45210 5 -0.43711 6 0.39313

Page 61: Computational Chemistry

Tasi Gyula: Számítógépes kémia

61

First-order density matrix 1 2 3 4 5 1 1.19521 0.65365 -0.02247 -0.32613 -0.02247 2 0.65365 0.92295 0.66938 0.05906 -0.33062 3 -0.02247 0.66938 1.00449 0.66489 0.00449 4 -0.32613 0.05906 0.66489 0.94991 0.66489 5 -0.02247 -0.33062 0.00449 0.66489 1.00449 6 0.65365 -0.07705 -0.33062 0.05906 0.66938 6 1 0.65365 2 -0.07705 3 -0.33062 4 0.05906 5 0.66938 6 0.92295 Total pi-electron energy = -8.5493 Pi-electron populations 1.1952 0.9230 1.0045 0.9499 1.0045 0.9230 Free valences 0.4247 0.4090 0.3977 0.4022 0.3977 0.4090

Az output magáért beszél. A piridin-molekulában a nitrogénatom negatív, az orto-szénatom pozitív, a meta-szénatom negatív, míg a para-szénatom pozitív parciális töltéssel rendelkezik.

Feladat: Hogyan értelmezhetjük a piridin-molekula aromás jellegét, bázicitását és elektrofil szubsztitúciós reakcióit? A piridínium-kation aromás jellegű?

Mostanában érdekes cikkek jelentek meg a szerves kémiai kurrikulumban tárgyalt, szubsztituált olefineket eredményező -eliminációs reakciókkal kapcsolatos ZAJCEV- és HOFMANN-szabályok elméleti értelmezéséről [lásd M.J. Webber, A.C. Spivey, Supporting Saytzeff, Nature Chemistry, 1, 435 (2009) és a benne hivatkozott cikkeket]. Kvantumkémiai számítási eredmények arra mutatnak, hogy a ZAJCEV-szabály elméleti értelmezésében az alkilcsoportokkal kapcsolatos hiperkonjugáció jelensége a legfontosabb faktor. Hiperkonju-gációnál a telítetlen (olefines, aromás) szénatomhoz kapcsolódó H C csoportok felől konjugatív típusú elektronáramlást tételezünk fel a telítetlen rendszer irányába, amely az előbbi csoportot pozitívvá, az utóbbit pedig negatívvá teszi: *

C-H C-C . Yasamusa I’HAYA foglalkozott a hiperkonjugáció figyelembevételével a HMO-elméleten

belül, s paraméterezte a kérdéses kölcsönhatást [I'Haya, Y., Hyperconjugation. I. General Theory and Its Applications to Simple LCAO MO Calculations. Bulletin of the Chemical Society of Japan, 1955. 28(5): p. 369-376; Hyperconjugation. II The Electronic Structures and Conjugation Energies of Alkylbenzenes. Bulletin of the Chemical Society of Japan, 1955. 28(5): p. 376-381]. Eszerint a konjugált rendszerrel hiperkonjugációban levő 3CH csoportot

3C H csoportként tekintjük. Ennek megfelelően két újabb nehézatommal kell számolnunk, s az I’HAYA által választott paraméterek a következők:

Page 62: Computational Chemistry

Tasi Gyula: Számítógépes kémia

62

0C 0.1 ;

3 0H 0.5 ;

3 0C H 2.92 ;

3 0C CH 0.834 .

Alkalmazva I’HAYA paramétereit, végezzünk HMO-számítást a toluol-molekulára, s értel-mezzük a kapott számítási eredményeket!

A Roald HOFFMANN (1937-, amerikai kémikus, kémiai Nobel-díj 1981-ben) által létreho-zott kiterjesztett (módosított, továbbfejlesztett) HÜCKEL-módszer (EHT, EHMO, Eng. Extended Hückel Theory, Extended Hückel MO) a HMO-módszer általánosításának tekinthető [R. Hoffmann: An extended Hückel theory. I. Hydrocarbons. Journal of Chemical Physics, 1397-1412 (1963)]. A módszert bemutató 1963-as közlemény Roald HOFFMANN máig legtöbbet hivatkozott cikke (5,448 hivatkozás 2010. 07. 10-én). A kérdéses közelítő (szemiempírikus, félempírikus) módszer össz-vegyértékelektron-módszer (Eng. all-valence-electron method). Az atomi belső, zárt héjakon levő elektronokat nem veszi figyelembe: hozzácsatolja őket az atommaghoz, létrehozva ezzel az atomi törzs (Eng. core) és a törzs-elektronok (Eng. core electrons) fogalmát

Tekintsük pl. a szénatomot! A szénatom elektronkonfigurációja alapállapotban: 1s2 2s2 2p2. Az első héj zárt 2 elektronnal. Ezeket hozzácsatoljuk az atommaghoz, így az atomi törzs töltése +4 lesz. A második héj a nyílt vegyértékhéj 4 elektronnal. Ezek befogadására a 2s, a 2px, a 2py és a 2pz AO-k szolgálnak. Minimálisan ennyi pálya szükséges a szénatom matema-tikai kezeléséhez az adott modellen belül. Ezt úgy mondjuk, hogy a szénatom minimális bázisa az EHMO-módszerben 4 bázisfüggvényből áll. (Minimális bázis esetén a törzselektro-nok figyelembevétele csak eggyel növelné meg a bázisfüggvények számát.) A hidrogénatom elektronkonfigurációja alapállapotban: 1s1. Ennek megfelelően minden hidrogénatom 1 darab 1s bázisfüggvénnyel járul hozzá a minimális bázishoz.

Az EHT-módszer a -vegyértékelektronokon túl tehát figyelembe veszi a -vegyérték-elektronokat is. Sikerének fő titka pedig abban rejlik, hogy a bázisfüggvények közötti átfedést nem hanyagolja el, hanem explicite számolja az S átfedési integrálmátrixot. A módszer hasonlóan az eredeti HMO-módszerhez explicite nem veszi figyelembe az elektron-elektron, a mag-elektron és a mag-mag elektrosztatikus kölcsönhatásokat.

Egy parametrizált effektív egyelektron H HAMILTON-mátrix (kiterjesztett HÜCKEL-mátrix, EH-mátrix) általánosított sajátértékegyenletének a megoldása révén kapjuk meg az MO-kat és az MO-energiákat (lásd a 3. projektet). A H-mátrix diagonális elemei empírikus atomi paraméterekből, atomi ionizációs potenciálokból származnak:

.H I

Az off-diagonális elemek számítására a MULLIKEN-WOLFSBERG-HELMHOLTZ-formula szol-gál:

1( ),

2H K H H S

Page 63: Computational Chemistry

Tasi Gyula: Számítógépes kémia

63

ahol K szintén empírikus paraméter. HOFFMANN K értékét eredetileg 1.75-nak választotta. A bázisfüggények általában SLATER-pályák (lásd a 14. projektet). A módszerben az atomi paraméterek értékének definiálásán túl csak a SLATER-pályák között kell átfedési integrálokat számítanunk. Az MO-khoz és az MO-energiákhoz egy általánosított sajátértékegyenlet megoldása révén jutunk. Mivel az EH-mátrix nem függ az MO-któl, ezért ez egyetlenegy lépésben megoldható, azaz nincs szükség iteratív eljárásra.

HOFFMANN a következő paramétereket alkalmazta eredeti közleményében:

2 11.4 eV;I C p

2 21.4 eV;I C s

1 13.6 eV;I H s

2 2 1.625;C s C p

1 1.0.H s

Ezek alapján az EHMO-számítások végzéséhez szükséges programot magunk is meg tudjuk írni. SLATER-pályák helyett azonban STO-6G GAUSS-pályákat (lásd a 14. projektet) fogunk alkalmazni. GAUSS-pályákkal ugyanis sokkal egyszerűbb a szükséges molekuláris integrálokat és azok deriváltjait számítani. A futtatáshoz a sehmo.exe programot használ-juk [G. Tasi, F. Mizukami, I. Pálinkó: A new program for effective one-electron (EHMO-ASED) calculations. Computers & Chemistry, 21, 319-325 (1997)]. Az első példánk legyen az etilén-molekula!

******************************************************************************** Scaled Extended Huckel Molecular Orbital (SEHMO) Program for Effective One-Electron Quantum Chemical Calculations <C> Dr. Gyula Tasi, PhD (Tsukuba-Szeged, 1995-98) ******************************************************************************** TITLE: ethylene INPUT Z-MATRIX GEOMETRY (ANGSTROMS & DEGREES) ATOMS BOND LENGTH BOND ANGLE TORSIONAL ANGLE NA NB NC 1 H 0.00000 0 0.00000 0 0.000 0 0 0 0 2 C 1.10000 1 0.00000 0 0.000 0 1 0 0 3 C 1.34000 1 120.00000 1 0.000 0 2 1 0 4 H 1.10000 2 120.00000 3 0.000 0 3 2 1 5 H 1.10000 2 120.00000 3 180.000 0 2 3 4 6 H 1.10000 2 120.00000 3 180.000 0 3 2 1 INPUT CARTESIAN GEOMETRY (ANGSTROMS) ATOMS CODE X Y Z 1 H 1 0.00000 0.00000 0.00000 2 C 1 1.10000 0.00000 0.00000 3 C 1 1.77000 1.16047 0.00000 4 H 1 1.22000 2.11310 0.00000 5 H 1 1.65000 -0.95263 0.00000 6 H 1 2.87000 1.16047 0.00000 CHARGE OF THE MOLECULE: 0 NUMBER OF ELECTRONS: 12 NUMBER OF LCAO BASIS FUNCTIONS: 12 NUMBER OF DOUBLY FILLED MOs: 6 NUMBER OF SINGLY FILLED MOs: 0

Page 64: Computational Chemistry

Tasi Gyula: Számítógépes kémia

64

OVERLAP INTEGRAL MATRIX 1 2 3 4 5 1 1.00000 0.56498 -0.46379 0.00000 0.00000 2 0.56498 1.00000 0.00000 0.00000 0.00000 3 -0.46379 0.00000 1.00000 0.00000 0.00000 4 0.00000 0.00000 0.00000 1.00000 0.00000 5 0.00000 0.00000 0.00000 0.00000 1.00000 6 0.16648 0.43682 0.21632 0.37468 0.00000 7 -0.14873 -0.21632 0.12122 -0.25760 0.00000 8 -0.09751 -0.37468 -0.25760 -0.17623 0.00000 9 0.00000 0.00000 0.00000 0.00000 0.26994 10 0.12624 0.16648 0.01008 0.17756 0.00000 11 0.24367 0.56498 0.23190 -0.40165 0.00000 12 0.05258 0.16648 0.14873 0.09751 0.00000 6 7 8 9 10 1 0.16648 -0.14873 -0.09751 0.00000 0.12624 2 0.43682 -0.21632 -0.37468 0.00000 0.16648 3 0.21632 0.12122 -0.25760 0.00000 0.01008 4 0.37468 -0.25760 -0.17623 0.00000 0.17756 5 0.00000 0.00000 0.00000 0.26994 0.00000 6 1.00000 0.00000 0.00000 0.00000 0.56498 7 0.00000 1.00000 0.00000 0.00000 -0.23190 8 0.00000 0.00000 1.00000 0.00000 0.40165 9 0.00000 0.00000 0.00000 1.00000 0.00000 10 0.56498 -0.23190 0.40165 0.00000 1.00000 11 0.16648 -0.01008 -0.17756 0.00000 0.05258 12 0.56498 0.46379 0.00000 0.00000 0.24367 11 12 1 0.24367 0.05258 2 0.56498 0.16648 3 0.23190 0.14873 4 -0.40165 0.09751 5 0.00000 0.00000 6 0.16648 0.56498 7 -0.01008 0.46379 8 -0.17756 0.00000 9 0.00000 0.00000 10 0.05258 0.24367 11 1.00000 0.12624 12 0.12624 1.00000 EFFECTIVE ONE-ELECTRON HAMILTONIAN 1 2 3 4 5 1 -13.60000 -17.30250 10.14543 0.00000 0.00000 2 -17.30250 -21.40000 0.00000 0.00000 0.00000 3 10.14543 0.00000 -11.40000 0.00000 0.00000 4 0.00000 0.00000 0.00000 -11.40000 0.00000 5 0.00000 0.00000 0.00000 0.00000 -11.40000 6 -5.09854 -16.35898 -6.20837 -10.75322 0.00000 7 3.25341 6.20837 -2.41830 5.13914 0.00000 8 2.13305 10.75322 5.13914 3.51587 0.00000 9 0.00000 0.00000 0.00000 0.00000 -5.38538 10 -3.00450 -5.09854 -0.22057 -3.88406 0.00000 11 -5.79933 -17.30250 -5.07271 8.78620 0.00000 12 -1.25131 -5.09854 -3.25341 -2.13305 0.00000 6 7 8 9 10 1 -5.09854 3.25341 2.13305 0.00000 -3.00450 2 -16.35898 6.20837 10.75322 0.00000 -5.09854 3 -6.20837 -2.41830 5.13914 0.00000 -0.22057 4 -10.75322 5.13914 3.51587 0.00000 -3.88406

Page 65: Computational Chemistry

Tasi Gyula: Számítógépes kémia

65

5 0.00000 0.00000 0.00000 -5.38538 0.00000 6 -21.40000 0.00000 0.00000 0.00000 -17.30250 7 0.00000 -11.40000 0.00000 0.00000 5.07271 8 0.00000 0.00000 -11.40000 0.00000 -8.78620 9 0.00000 0.00000 0.00000 -11.40000 0.00000 10 -17.30250 5.07271 -8.78620 0.00000 -13.60000 11 -5.09854 0.22057 3.88406 0.00000 -1.25131 12 -17.30250 -10.14543 0.00000 0.00000 -5.79933 11 12 1 -5.79933 -1.25131 2 -17.30250 -5.09854 3 -5.07271 -3.25341 4 8.78620 -2.13305 5 0.00000 0.00000 6 -5.09854 -17.30250 7 0.22057 -10.14543 8 3.88406 0.00000 9 0.00000 0.00000 10 -1.25131 -5.79933 11 -13.60000 -3.00450 12 -3.00450 -13.60000 EIGENVALUES & EIGENVECTORS (MO ENERGIES AND MO COEFFICIENTS) NO. 1 2 3 4 5 EIGENVALUES (eV) -26.98116 -20.60455 -16.21525 -14.44804 -13.77578 1 H 1S 1 -0.08877 0.23965 -0.26679 -0.19037 0.34358 2 C 2S 2 -0.48705 0.38596 0.00000 0.07407 0.00000 2Px 3 -0.01199 -0.08840 0.33092 0.26323 -0.38345 2Py 4 -0.02077 -0.15311 -0.19105 0.45593 0.22139 2Pz 5 0.00000 0.00000 0.00000 0.00000 0.00000 3 C 2S 6 -0.48705 -0.38596 0.00000 0.07407 0.00000 2Px 7 0.01199 -0.08840 0.33092 -0.26323 0.38345 2Py 8 0.02077 -0.15311 -0.19105 -0.45593 -0.22139 2Pz 9 0.00000 0.00000 0.00000 0.00000 0.00000 4 H 1S 10 -0.08877 -0.23965 -0.26679 -0.19037 -0.34358 5 H 1S 11 -0.08877 0.23965 0.26679 -0.19037 -0.34358 6 H 1S 12 -0.08877 -0.23965 0.26679 -0.19037 0.34358 NO. 6 7 8 9 10 EIGENVALUES (eV) -13.21742 -8.23857 6.44956 10.49165 15.59150 1 H 1S 1 0.00000 0.00000 -0.68334 -0.57558 0.71276 2 C 2S 2 0.00000 0.00000 0.00000 0.13136 0.00000 2Px 3 0.00000 0.00000 -0.64657 -0.51379 0.85505 2Py 4 0.00000 0.00000 0.37330 -0.88990 -0.49367 2Pz 5 0.62747 -0.82757 0.00000 0.00000 0.00000 3 C 2S 6 0.00000 0.00000 0.00000 -0.13136 0.00000 2Px 7 0.00000 0.00000 -0.64657 -0.51379 -0.85505 2Py 8 0.00000 0.00000 0.37330 -0.88990 0.49367 2Pz 9 0.62747 0.82757 0.00000 0.00000 0.00000 4 H 1S 10 0.00000 0.00000 -0.68334 0.57558 -0.71276 5 H 1S 11 0.00000 0.00000 0.68334 -0.57558 -0.71276 6 H 1S 12 0.00000 0.00000 0.68334 0.57558 0.71276 NO. 11 12 EIGENVALUES (eV) 21.26293 53.24267 1 H 1S 1 0.65140 -0.39464 2 C 2S 2 -0.88325 1.47208

Page 66: Computational Chemistry

Tasi Gyula: Számítógépes kémia

66

2Px 3 0.25187 0.35517 2Py 4 0.43625 0.61517 2Pz 5 0.00000 0.00000 3 C 2S 6 -0.88325 -1.47208 2Px 7 -0.25187 0.35517 2Py 8 -0.43625 0.61517 2Pz 9 0.00000 0.00000 4 H 1S 10 0.65140 0.39464 5 H 1S 11 0.65140 -0.39464 6 H 1S 12 0.65140 0.39464 ELECTRONIC ENERGY (eV): -210.48440 TWO BODY REPULSION ENERGY (eV): 0.000000 TOTAL ENERGY (eV): -210.484396 TOTAL ENERGY (hartrees): -7.735098

A kapott számítási eredmények pontosan megegyeznek a HOFFMANN által közölt eredmé-nyekkel. Hasonlóan a HÜCKEL-módszerhez, a rendszer EH-elektronenergiája:

,EH i ii

E

ahol i a i MO betöltöttségi száma. Mutassuk meg, hogy az EH-elektronenergia következő formában is előállítható:

,EHE P H

ahol P a P elsőrendű sűrűségmátrix egy eleme! Az EHMO-módszer jelentőségéről, szerves, szervetlen, komplex- és szilárdtestkémiai

alkalmazásairól Myung-Hwan WHANGBO írt egy összefoglaló munkát: Perspective on “Extended Hückel Theory. I. Hydrocarbons” Hoffman R. (1963) J Chem Phys 39:1397-1412, Theor. Chem. Acc., 103, 252 (2000).

A számítási eredmények azt mutatják, hogy az EH-elektronenergia nem viselkedik úgy, mintha a magok mozgására vonatkozó SCHRÖDINGER-egyenletben potenciális energia lenne. A kérdéses energia ilyen értelemben nem teljes energia! Ennek következtében nem várható el, hogy az EHMO-módszer korrekt molekuláris geometriákat szolgáltasson. A legegysze-rűbben úgy kaphatnánk megfelelő teljes energiát, ha az EH-elektronenergiához hozzáadnánk a mag-mag COULOMB-féle taszítási energiát. Ez az eljárás azonban nem vezet jó eredmény-hez: a tapasztalat azt mutatja, hogy a kapott potenciális energiafelület (PES, Eng. Potential Energy Surface) nem rendelkezik lokális minimumokkal, s parametrizálással sem tudjuk megoldani a problémát.

ANDERSON és HOFFMANN 1974-ben azt javasolta, hogy az EH-elektronenergiához a mag-mag taszítási energia helyett a következő taszítási tagot adjuk hozzá [A.B. Anderson, R. Hoffmann: Description of Diatomic Molecules Using Electron Configuration Energies with Two-body Interactions. J. Chem. Phys., 60, 4271 (1974)]:

, ,

1,

2BA B

rep AB AB AA B A A B A A B A A B A

Z ZE E E Z d

rr

R R R r

ahol EAB az A atommag és a B neutrális atom elektrosztatikus kölcsönhatási energiája. A szummajel alatti “A,B<A” jelölés azt jelzi, hogy az összegben minden atompár pontosan egyszer szerepel. A ( )B r a B atom elektronsűrűsége. Számításához ugyanazokat a bázis-

Page 67: Computational Chemistry

Tasi Gyula: Számítógépes kémia

67

függvényeket használták, mint amiket az EHMO molekuláris számításokban, de az atomi állapotoknak megfelelő elektronpopulációkat vették figyelembe. Az előző formulában az első tag az A és a B atommagok COULOMB-féle taszítási energiája, a második tagban szereplő integrál pedig a B atom elektroneloszlása által az A atommag helyén keltett elektrosztatikus potenciált adja meg. Ezt az A atommag töltésével megszorozva egy elektrosztatikus kölcsön-hatási energiát kapunk. Látható, hogy a második tag nagymértékben csökkenti az első tag nagyságát, s így a taszítási energia nem múlja felül az elektronenergiát a szokásos kötéstávolságoknál. Az EAB számításánál eredetileg az elektronegatívabb atom elektronsűrű-ségét alkalmazták. Ezt az aszimmetriát azonban érdemes megszüntetni, s a következő szimmetrikus formát használni [G. Calzaferri, L. Forss, I. Kamber: Molecular Geometries by the Extended Hückel Molecular Orbital Method, J. Phys. Chem., 93, 5366 (1989)]:

1.

2B AA B

AB A BA B A B

Z ZE Z d Z d

r r

r rR R R r R r

ANDERSON a módszerét később ASED-módszernek (Eng. Atom Superposition and Electron Delocalization) nevezte el [A.B. Anderson: Derivation of the extended Hückel method with corrections: One electron molecular orbital theory for energy level and structure determinations, J. Chem. Phys., 63, 1187 (1975)]. Az elektrosztatikus kölcsönhatás figyelembevételén túl a korábbi konstans K helyett távolságfüggő K-t vezetett be:

1

exp ;

2.25;

0.13 Å .

K k R

k

CALZAFERRI és munkatársai K távolságfüggését is módosították, mivel megmutatták, hogy K < 1 esetén az eredeti formula fizikailag rossz eredményeket szolgáltat.

Az EHMO-ASED-modell esetén a rendszer teljes energiáját tehát a következő formula adja meg:

tot EH repE E E

Hatékony geometriai optimalizáláshoz szükségünk van a teljes energia geometriai paramé-terek szerinti gradiensvektorára. Megmutatható, hogy a gradiensvektor komponensei a követ-kező formula alapján számíthatók:

,reptot

A A A A

EH SEP W

x x x x

ahol a W mátrix az ún. energiasúlyozott sűrűségmátrix (Eng. energy-weighted density matrix) a következő elemekkel:

1

.occ

i i i ii

W c c

Az Erep magkoordináták szerinti első deriváltjai általában könnyen számíthatók. Az előzőek szerint pedig a H R mátrix számításához is csak a S R mátrixra van szükségünk. Ezek alapján megállapíthatjuk, hogy az EHMO-ASED módszer számítógépes numerikus megvaló-

Page 68: Computational Chemistry

Tasi Gyula: Számítógépes kémia

68

sításához csak az S átfedési integrálmátrixra és annak a S R első deriváltjára van szük-ségünk.

Az EHMO-ASED-módszert tovább finomíthatjuk, ha figyelembe vesszük a törzselektro-nokat is, azaz egy összelektron félempírikus kvantumkémiai módszert (Eng. all-electron semiempirical quantum chemical method) hozunk létre [G. Tasi, F. Mizukami: Scaled Effective One-Electron Method Based on G2 Theory: Results for Alphatice Alkane Molecules, J. Chem. Inf. Comput. Sci., 38, 632 (1998)]. Ez lehetővé teszi, hogy a számított teljes energia nagyságrendje megegyezzen a kísérleti teljes energiáéval. Ha csak a vegyértékelektronokat vesszük figyelembe, akkor ez nem lehetséges. A H-mátrix off-diagonális elemeinek a számítására vonatkozó formulát következőképpen módosítottuk:

1( ),

2H K H H S

ahol

exp .ABK R

Az RAB az A és a B atomok közötti távolság, és a , az , valamint a paramétereket referenciamolekulákon végzett paraméterbecslési számításokkal határoztuk meg. Az EAB számítására a hagyományos COULOMB-féle taszítási energia skálázásával állítottunk elő egy megfelelő formulát [S.L. Dixon, P.C. Jurs: Fast Geometry Optimization Using a Modified Extended Hückel Method: Results for Molecules Containing H, C, N, O, and F, J. Comput. Chem., 15, 733 (1994)]:

exp ,A BA BAB A B AB

AB

Z ZE R

R

ahol ZA és ZB az A és a B atomok rendszáma. A A, a B, az A és az B atomi paramétereket pedig paraméterbecsléssel határoztuk meg. Az S-mátrix számítására STO-3G AO-kat alkal-maztunk.

A paraméterbecsléssel meghatározott paraméterek értékét atomi egységekben a következő táblázatok tartalmazzák [G. Tasi, F. Mizukami: Scaled Effective One-Electron Method Based on G2 Theory: Results for Alphatic Alkane Molecules, J. Chem. Inf. Comput. Sci., 38, 632 (1998)]:

atomok 1s I1s 2s I2s 2p I2p H 1.324 0.4862 0.6212 1.2160 C(sp3) 5.636 17.8044 1.820 0.7740 1.600 0.3979 0.4886 1.0858

kölcsönhatás HH 1.7632 0.0569 0.8597 C(sp3)H 1.7490 0.0447 0.9219 C(sp3)C(sp3) 1.8933 0.0518 1.1389

A kérdéses módosított EHMO-módszert SEOEM-módszernek (Eng. Scaled Effective One-Electron Method) neveztük el. A módszer lehetőséget nyújt konformációs analízisre és

Page 69: Computational Chemistry

Tasi Gyula: Számítógépes kémia

69

statisztikus mechanikai formulák révén termodinamikai mennyiségek számítására is [D.A. McQuarrie: Statistical Mechanics, Harper & Row, New York (1976)] (lásd a 12. projektet).

Az előbbiekben bemutatott paramétereket próbaképpen más típusú szénhidrogén-molekulák esetén is alkalmazhatjuk. Végezzünk pl. geometriai optimalizálást az 1. projektben tanulmányozott propinmolekulára az EHMO-, az ASED- és a SEOEM-módszer segítségével a szimmetria megkötése nélkül! A számításokhoz használjuk a sehmo.exe programot! Mit tapasztalunk? További részletek találhatók a következő cikkben: G. Tasi et al.: Enumeration of the Conformers of Unbranched Aliphatic Alkanes, J. Phys. Chem. A, 102, 7698 (1998).

Feladatok:

4.1 HÜCKEL szerint egy planáris monociklusos konjugált -rendszer akkor aromás, ha az stabilabb, mint a megfelelő nyíltláncú, aciklusos forma. Ha a nyíltláncú forma stabilabb, akkor antiaromás rendszerről beszélünk. Vizsgálja meg ebből a szempontból a benzol- és ciklobutadién-molekulákat!

4.2 A HÜCKEL-féle (4n+2) szabály eredetileg monociklusos aromás szénhidrogénekre vonat-kozik. Érdekes módon azonban néhány policiklusos molekulára is teljesül: naftalin (n = 2), antracén és fenantrén (n = 3). Határozza meg a kérdéses molekulák esetén a -elektronok delokalizációjából származó stabilizációs energiát!

4.3 Az azulén közönséges körülmények között kék színű szilárd anyag. A naftalin-molekula izomerje. Magas hőmérsékleten (~350 C) átalakul naftalinné. Tanulmányozza a naftalin- és az azulén-molekulákat a HMO- és az EHMO-módszerek segítségével. Melyik a stabilabb izomer a kérdéses módszerek szerint?

4.4 Egyes szerves kémiai tankönyvek azt állítják, hogy az 1,3,5,7-ciklooktatetraén-molekula azért nem planáris, mivel ha planáris lenne, akkor a molekula antiaromás tulajdonsággal rendelkezne. Igaz ez az állítás?

4.5 Határozza meg sztirolmolekula esetén a szomszédos szénatomok közötti kötésrendeket és a szénatomokon levő szabadvegyértékeket a HMO-módszer segítségével! Gyökök hol támad-ják meg legkönnyebben a molekulát? Készítse el a molekula teljes molekuláris diagramját feltüntetve a szabad vegyértékeket és a kötésrendeket!

4.6 Végezzen HMO-számítást az anilin-molekulára! A szénatomok -elektronpopulációi nem lesznek azonosak. A számítási eredmények alapján hogyan csökkenthetjük az anilin-moleku-la bázicitását?

*4.7 A megadott irodalom [G. Doggett, Molecular Physics, 10, 225 (1966)] alapján módo-sítsa úgy a HMO-programot, hogy az képes legyen -módszerrel való számítások végzésére is! További bővítési lehetőséget jelent a nyílt héjú (Eng. open shell) molekulák kezelése is.

4.8 A HMO-módszerrel határozza meg az o-, a m- és a p-xilolmolekulák teljes -elektron-energiáját! A kapott relatív stabilitási sorrend megfelel az experimentális és a magasabbrendű számítási eredményeknek?

Page 70: Computational Chemistry

Tasi Gyula: Számítógépes kémia

70

4.9 Tanulmányozza a HMO-módszerrel a furánmolekula metilszármazékainak (mono, di és tri) az elektronszerkezetét és relatív stabilitását! Vesse össze a kapott eredményeket az iroda-lomban fellelhető [Simmie, J.M. and H.J. Curran, Formation Enthalpies and Bond Dissociation Energies of Alkylfurans. The Strongest C-X Bonds Known?, Journal of Physical Chemistry A, 113: 5128 (2009).] kísérleti és magasabb szintű számítási eredményekkel!

4.10 Határozza meg a trimetilénmetán (C(CH2)3) HÜCKEL-féle -elektronenergiáját! Vesse össze a kérdéses energiát 2 eténmolekula -elektronenergiájával!

4.11 A HMO-elmélet szerint a lineáris vagy a szabályos háromszög geometriai elrendeződés a stabilabb a 3H molekulaion esetén? Végezze el a számítást a H3 és a 3H szpécieszekre is!

Page 71: Computational Chemistry

Tasi Gyula: Számítógépes kémia

71

5. Molekulák tehetetlenségi tenzora Molekulák I={Iij} (i,j=x,y,z) tehetetlenségi tenzora (Eng. inertial tensor, tensor of inertia)

alatt a következő mátrixot értjük (MK: 1-6.3.):

,xx yx zx

xy yy zy

xz yz zz

I I I

I I I

I I I

I

ahol 2 2

2 2

2 2

( ); ;

( ); ;

( ); .

xx i i i xy yx i i ii i

yy i i i yz zy i i ii i

zz i i i xz zx i i ii i

I m y z I I m x y

I m x z I I m y z

I m x y I I m x z

A diagonálisban álló Ixx, Iyy, Izz mennyiségek rendre az x-, az y- és a z-tengelyekre vonatkozó tehetetlenségi momentumok, az off-diagonális elemek pedig a deviációs momentumok. Meg-jegyezzük, hogy az Ixx, Iyy, Izz elemek estén a zárójelben az i-ik tömegpontnak a megfelelő tengelytől való távolságának a négyzete szerepel. Látható, hogy a tehetetlenségi momentu-mok pozitív mennyiségek, a deviációs momentum azonban lehet pozitív, negatív vagy zérus.

Az I tehetetlenségi tenzor valós és szimmetrikus mátrix, így ortogonális transzformáció-val diagonalizálható, s a sajátértékek valós számok (MK: 1-4.):

; ( ); .iI TI V V Diag V I V

A kérdéses ortogonális transzformáció (főtengely-transzformáció, Eng. principal axis transformation) az (x,y,z) koordináta-rendszert olyan (x',y',z') koordináta-rendszerbe (PAS, Eng. Principal Inertial Axis System) forgatja (bázistranszformáció), melynél a deviációs momentumok eltűnnek (MK: 1-5.). Az x'-, az y'- és a z'-tengelyeket főtehetetlenségi tenge-lyeknek (Eng. principal inertial axes), s a sajátértékeket pedig főtehetetlenségi momen-tumoknak (Eng. principal inertial momenta) nevezzük. Az atommagok koordinátáit az új koordináta-rendszerben következőképpen kaphatjuk meg:

12 21 31

12 22 32

13 23 33

.i i

Ti i i i

i i

x v v v x

y v v v y

z v v v z

r V r

A spektroszkópiában a főtehetetlenségi tengelyeket a, b és c; a főtehetetlenségi momen-tumokat pedig Ia, Ib és Ic módon jelöljük, s a b cI I I a sorrend. Az irodalomban általában a belőlük származtatható forgási állandókat (Eng. rotational constants) adják meg cm1 és MHz mértékegységben:

2 2 2; ; .

8 8 8a b c

h h hA B C

cI cI cI

Molekulák forgó mozgásával és forgási spektroszkópiájával a következő kitűnő könyvek részletesen foglalkoznak: H.W. Kroto, Molecular Rotation Spectra, Dover Publications, New York, (1992); P. Hedvig, Experimental Quantum Chemistry, Akadémiai Kiadó, Budapest

Page 72: Computational Chemistry

Tasi Gyula: Számítógépes kémia

72

(1975). Harold KROTO (1939-) angol kémikus 1996-ban kémiai NOBEL-díjat kapott Richard E. SMALLEY-val és Robert F. CURL-lel megosztva “a fullerének felfedezéséért”. A buckminsterfullerén (C60, “bucky ball”) az egyik legnagyobb szimmetriával rendelkező ismert molekula.

A főtehetetlenségi momentumok alapján a molekulákat a következő csoportokba sorol-hatjuk: 1. Aszimmetrikus pörgettyű (Eng. asymmetric top) esetén a sajátértékek nem degeneráltak: Ia Ib Ic. A molekulák legnagyobb része ebbe a csoportba tartozik. 2. Szimmetrikus pörgettyű (Eng. symmetric top) esetén az egyik sajátérték kétszeresen dege-nerált. További két eset lehetséges: (i) ha Ia < Ib = Ic, akkor prolát (nyújtott) szimmetrikus pörgettyűről és (ii) ha Ia = Ib < Ic, akkor oblát (lapított) szimmetrikus pörgettyűről beszélünk. Az előző csoportba tartozik pl. a metilklorid, az utóbbiba pedig a benzol:

Az első esetben a molekulaalak egy szivarhoz, a másodikban egy diszkoszhoz hasonló. 3. Gömbi pörgettyűről (Eng. spherical top) beszélünk, ha a sajátérték háromszorosan degene-rált: Ia = Ib = Ic. Ebbe a csoportba tartozik pl. a metánmolekula. 4. Lineáris molekula esetén Ia = 0 és Ib = Ic (feltéve, hogy az atomok az a tengelyen helyez-kednek el).

Legyen a molekula planáris, s válasszuk az (a,b)-síkot molekulasíknak, ekkor

2 2 2 2, , ( ).a i i b i i c i i ii i i

I m b I m a I m a b

Tehát Ic = Ia + Ib. Planáris molekulára példa a BF3, az etilén és a benzol. A főtengely-transzformáció végrehajtásához meg kell oldanunk az I mátrix közönséges

sajátértékegyenletét (MK: 1-4.). Szerencsére az I mátrix valós és szimmetrikus, így a saját-értékegyenlet a JACOBI-módszerrel numerikusan könnyen megoldható. A fejezet elején bemutatott formulákra építve készítettünk egy szubrutint molekulák tehetetlenségi tenzorának számítására (inertia.f):

************************************************************************ subroutine inertia(natoms,nat,wt,coord,f) ************************************************************************ * Subroutine INERTIA calculates the inertial tensor of a molecule. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************

Page 73: Computational Chemistry

Tasi Gyula: Számítógépes kémia

73

implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter(mat=100) dimension wt(90),coord(3,mat),nat(mat),f(3,3) do i=1,3 do j=1,3 f(i,j)=0.d0 end do end do do i=1,natoms nati=nat(i) f(1,1)=f(1,1)+wt(nati)*(coord(2,i)**2+coord(3,i)**2) f(2,2)=f(2,2)+wt(nati)*(coord(3,i)**2+coord(1,i)**2) f(3,3)=f(3,3)+wt(nati)*(coord(1,i)**2+coord(2,i)**2) f(2,1)=f(2,1)-wt(nati)*coord(1,i)*coord(2,i) f(3,1)=f(3,1)-wt(nati)*coord(1,i)*coord(3,i) f(3,2)=f(3,2)-wt(nati)*coord(2,i)*coord(3,i) end do f(1,2)=f(2,1) f(1,3)=f(3,1) f(2,3)=f(3,2) return end

Most már “csak” egy főprogramra van szükségünk, s az eddig elkészített modulok segít-ségével végre tudjuk hajtani a főtengely-transzformációt. Látható, hogy milyen nagy jelen-tősége van a moduláris szervezésnek: kisebb modulokból mint téglákból nagy programot tudunk építeni.

************************************************************************ program main ************************************************************************ * Program PMOMENTS calculates the principal moments and principal axes * * of inertia of molecules. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) character title*70 parameter(mat=100) common/weight/ wt(90) common/adat1/ pi,delta dimension f(3,3),eig(3),rotm(3,3),coord(3,mat) dimension cord(3,mat),store(3),nat(mat) data eps,iord /1.0d-10,1/ data av /6.022045d0/ data ph /6.626176d0/ data sl /2.99792458d0/ c if(pi.eq.0.d0) pi=4.d0*datan(1.d0) c c Conversion factors c tocmm1=1.0d2*(ph*av)/(8.0d0*pi*pi*sl) tomhz=1.0d6*(ph*av)/(8.0d0*pi*pi)

Page 74: Computational Chemistry

Tasi Gyula: Számítógépes kémia

74

c read(*,'(a70)') title read(*,*) natoms do i=1,natoms read(*,*) nat(i),(coord(j,i),j=1,3) end do write(*,'(a,a70/)') 'Title: ',title write(*,'(a)') 'Molecular geometry (Angstroms)' write(*,'(16x,a1,16x,a1,15x,a1,15x,a1)') 'x','y','z','w' do i=1,natoms write(*,'(i3,2x,4f16.6)') nat(i),(coord(j,i),j=1,3),wt(nat(i)) end do c c Computation of the center of mass of the molecule c call cmass(natoms,nat,wt,coord,wmol,cmx,cmy,cmz) write(*,'(/a,f16.6)') 'Molecular weight= ',wmol write(*,'(/a/)') 'Center of mass' write(*,'(3(3x,a5,f13.6))') 'cmx= ',cmx,' cmy= ',cmy,' cmz= ', $ cmz write(*,'(/a/)')'Cartesian coordinates related to center of mass' do i=1,natoms write(*,'(i3,2x,3f16.6)') nat(i),(coord(j,i),j=1,3) end do c c Generation of the inertial tensor of the molecule c call inertia(natoms,nat,wt,coord,f) write(*,'(/a)') 'Inertial tensor' call matout(f,eig,3,3,3,3,1) c c Diagonalization of the inertial tensor c call jacobi(f,3,3,eig,rotm,eps,iord) write(*,10) 10 format(//,'Principal moments of inertia'/ 1 2x,4h no.,7x,11h in amu.a+2,7x,10h in g.cm+2,8x, 2 8h in cm-1,10x,7h in mHz/31x,8h (*d+40)/) do i=1,3 e1=0.d0 e2=0.d0 e3=0.d0 if(eig(i).gt.1.d-3) then e1=eig(i)/av*10.d0 e2=tocmm1/eig(i) e3=tomhz/eig(i) else eig(i)=0.d0 endif write(*,'(2x,i2,3x,4d18.7)') i,eig(i),e1,e2,e3 end do write(*,'(/a)') 'Eigenvectors of inertial tensor' call matout(rotm,eig,3,3,3,3,2) do i=1,natoms do j=1,3 store(j)=coord(j,i) end do do j=1,3 cord(j,i)=0.d0

Page 75: Computational Chemistry

Tasi Gyula: Számítógépes kémia

75

do k=1,3 cord(j,i)=cord(j,i)+rotm(k,j)*store(k) end do end do end do write(*,'(/a/)')'Coordinates related to principal axes of inertia' do i=1,natoms write(*,'(i3,2x,3f16.6)') nat(i),(cord(j,i),j=1,3) end do end

Mentsük el a főprogramot pas.f néven. A program a főtehetetlenségi momentumokat és a belőlük származtatható rotációs állandókat különböző mértékegységekben nyomtatja ki. Nézzük át forráskódot, s állapítsuk meg, hogy milyen fájlok szükségesek a pas.exe futtat-ható program létrehozásához! Ezek a következők: pas.f, blockdata.f, cmass.f, jacobi.f, inertia.f, matout.f. Készítsük el a kérdéses programunkat:

>ifort –o pas.exe pas.f blockdata.f cmass.f jacobi.f inertia.f matout.f

Egyszerű példaként tekintsük a 1 162H O molekulát! A molekula alapállapotú egyensúlyi

geometriájának megfelelő Z-mátrixot könnyen elő tudjuk állítani:

I Vegyjel Kötéshossz Kötésszög Torziós szög J K L 1 H 0.0000 0.0 0.0 0 0 0 2 O 0.9584 0.0 0.0 1 0 0 3 H 0.9584 104.5 0.0 2 1 0

Ezt a z2c.exe program segítségével konvertálni tudjuk atomi DESCARTES-koordinátákká:

Atom Xi Yi Zi mi H 0.000000 0.000000 0.000000 1.00783 O 0.958400 0.000000 0.000000 15.99491 H 1.198364 0.927873 0.000000 1.00783

Meghatározva a molekula tömegközéppontját ( 0.918198 ÅcmX , 0.051922 ÅcmY és 0.000000 ÅcmZ ), az origót a tömegközéppontba helyezzük:

Atom xi yi zi H 0.918198 0.051922 0.000000 O 0.040202 0.051922 0.000000 H 0.280166 0.875851 0.000000

Ezután az I mátrix elemeit már könnyen számíthatjuk (amu Å2):

0.81914 0.26199 0.00000

0.26199 0.95465 0.00000 .

0.00000 0.00000 1.77378

I

A kapott mátrixnak meghatározzuk a sajátértékeit: 0.61628, 1.15751 és 1.77378 amu Å2. Végül is a következő értékeket kapjuk a főtehetetlenségi momentumokra: 1.02, 1.92 és 2.95

40 210 cmg . Látható, hogy a molekula aszimmetrikus pörgettyű. A főtehetetlenségi tenge-lyekre vonatkozó DESCARTES-koordináták (Å):

Page 76: Computational Chemistry

Tasi Gyula: Számítógépes kémia

76

Atom ai bi ci H 0.757797 0.521083 0.000000 O 0.000000 0.065666 0.000000 H 0.757797 0.521083 0.000000

Feladatok:

5.1 Az 1.1 feladatban meghatároztuk az alapállapotú ciklopropán-molekula szimmetriáját, és előállítottuk a molekula Z-mátrixát. Majd a z2c.exe program segítségével a Z-mátrixot DESCARTES-koordinátákká konvertáltuk. Milyen pörgettyű a molekula?

5.2 Az 1.2 feladat szerint az alapállapotú 1-butén-3-in molekula planáris. Ellenőrizze ezt a tényt a molekula tehetetlenségi tenzora segítségével!

5.3 Az 1.3 feladat a benzolmolekulával foglalkozott. Milyen pörgettyű a molekula?

5.4 Miben hasonlít a kubánmolekula a forgómozgás szempontjából a metánmolekulához?

5.5 Milyen szimmetriával rendelkezik a buckminsterfullerén (C60) molekula? Próbálja meg előállítani a molekula geometriáját! Határozza meg a molekula főtehetetlenségi momentu-mait! Milyen pörgettyűről van szó?

Page 77: Computational Chemistry

Tasi Gyula: Számítógépes kémia

77

6. Molekulák szimmetriájának számítógépes meghatározása Molekulák szimmetriájának leírására többfajta csoportot alkalmazhatunk (MK: 1-6.):

(1) A molekuláris pontcsoport és a molekuláris vázcsoport használata esetén a molekulát a BORN-OPPENHEIMER-féle közelítésnek megfelelően atommagokból álló merev struktúrának tekintjük. Az atommagokat – a potenciális energia-hiperfelület egy lokális minimumának megfelelő egyensúlyi helyzetükben fixáljuk (sztatikus szimmetria); (2) A molekuláris szimmetriacsoport elemei az azonos magok permutációi az inverzióval együtt és anélkül. Ez a csoport nem igényel egy egyértelmű molekulageometriát (dinamikus szimmetria). A molekuláris szimmetriacsoportot, a molekuláris pontcsoporttal szemben, alkalmazhatjuk flexibilis molekulák tanulmányozására és olyan elektronátmenetek leírására, melyeknél a magkonfiguráció változik.

A molekulák tehát az egyensúlyi magkonfigurációjuk szimmetriája alapján pontcso-portokba sorolhatók (SCHÖNFLIES-féle pontcsoportok). A SCHÖNFLIES-féle jelölésrendszerben minden pontcsoport speciális jellel rendelkezik. A molekuláris pontcsoportok meghatározá-sára egy egyszerű algoritmus írható fel (MK: 1-6.1). Az algoritmus folyamatábrája az (MK: F.1-4.) függelékben található.

A következőkben készítsünk egy egyszerű szubrutint, ami az atommagok DESCARTES-koordinátáinak birtokában meghatározza, hogy a kérdéses magkonfiguráció milyen pontcso-portba tartozik! Az egyszerűség kedvéért a pgroup szubrutin megírása során alapvetően az (MK: F.1-4.) függelékben található folyamatábrát követjük.

Az előző projektben részletesen tárgyalt főtengely-transzformáció végrehajtása után kezünkben vannak a főtehetetlenségi momentumok (Ia, Ib és Ic) és a molekula orientációja olyan, hogy a főtehetetlenségi tengelyek (a, b és c) általában egybeesnek a szimmetriatenge-lyekkel. Az első kérdésre (“A molekula lineáris?”) könnyen választ tudunk adni. Ha Ia = 0 és Ib = Ic, akkor a válaszunk igen, egyébként pedig nem. Ha a molekula lineáris, akkor a folyamatábra szerint csak azt kell megvizsgálnunk, hogy az rendelkezik-e szimmetria-centrummal. Ennek érdekében a koordinátákat invertáljuk: xi’ = xi, yi‘ = yi, zi‘ = zi, majd megvizsgáljuk, hogy a kapott konfiguráció ekvivalens-e az eredetivel. Akkor lesz ekvivalens, ha minden atomhoz tudunk egy olyan azonos rendszámú atomot találni, melynek koordinátái a geometriai transzformáció végrehajtása után egy bizonyos intervallumon belül megegyez-nek a kérdéses atom koordinátáival. Ezt az ellenőrzést a check szubrutin végzi el. A delta paraméter révén állíthatjuk be azt az intervallumhosszt, amelyen belül a koordináták eltérését megengedjük. Természetesen a delta paraméter értékének változtatásával torzult geomet-riákhoz is rendelhetünk valamilyen pontcsoportot. Ha van szimmetriacentrum, akkor hD , egyébként vC .

Ha a molekula nem lineáris, akkor először az a-, b- és c-tengelyek körül elemi forgatásokat végezve, megállapítjuk, hogy a főtehetetlenségi tengelyek szimmetriatengelyek-e és ha azok, akkor a rendűségüket is nyilvántartjuk. Az elemi forgatásokat a rotate szubrutin (rotate.f) segítségével hajtjuk végre (2. projekt). A valódi forgástengelyek (Cn) feltérképezése után megvizsgáljuk, hogy a molekula rendelkezik-e nemvalódi forgástengelyekkel (Sn, S2n). A rotsn és a rots2n logikai változók tárolják ezt az információt.

Page 78: Computational Chemistry

Tasi Gyula: Számítógépes kémia

78

A forgási szimmetriatengelyek meghatározása után megvizsgáljuk, hogy az (a,b)-, az (a,c)- és a (b,c)-síkok szimmetriasíkok-e. A tükrözést az rflect szubrutin (rflect.f) segítségével hajtjuk végre (2. projekt). Az (a,b) szimmetriasík létét a planxy logikai változó révén nyilvántartjuk.

A szimmetriatengelyek és a szimmetriasíkok meghatározása után a szimmetriacentrum létét vizsgáljuk meg. A symcen logikai változó értéke .true., ha van szimmetriacentruma a molekulának.

Ha a molekula gömbi pörgettyű, akkor a pontcsoportja a folyamatábránk szerint csak Td, Ih és Oh lehet. Ha nincs a molekulának szimmetriacentruma, akkor a pontcsoport Td, ha van, akkor a C5 szimmetriatengely létét kell megvizsgálnunk.

Ha a molekula aszimmetrikus pörgettyű, akkor a lehetséges pontcsoportok a következők: C1, C2, Cs, Ci, C2v, C2h, D2 és D2h.

Ha a molekula szimmetrikus pörgettyű, akkor a lehetséges pontcsoportok: Cn, Cnh, Cnv, Dn, Dnh, Dnd és S2n, ha n > 2. Ha n = 2, akkor két eset lehetséges: D2d és S4. Először is keresünk egy olyan atomot, amelyik nem a z-tengelyen fekszik, majd a molekulát a z-tengely körül úgy forgatjuk el, hogy a kérdéses atom az (x,z)-síkba kerüljön. Ezután egyszerűen meg tudjuk állapítani, hogy a molekula rendelkezik-e v szimmetriasíkkal. Ennek érdekében csak az (x,z)-síkra vonatkozóan kell tükrözést végrehajtanunk. Ha létezik v, akkor a planev logikai változó értéke .true. lesz.

A továbbiakban azt is tudnunk kell, hogy a molekula rendelkezik-e a Cn főtengelyre merőleges C2 szimmetriatengelyekkel és d szimmetriasíkokkal. Ennek érdekében a z-tengely körül elemi forgatásokat végzünk, s megvizsgáljuk, hogy az x-tengely szimmetriatengely-e és az (x,z)-sík szimmetriasík-e. Ha találunk n db. C2 tengelyt, akkor a rotc2d logikai változó értékét .true.-ra állítjuk. Ha n db. szimmetriasíkot is találunk, akkor a planed logikai változó értéke is .true. lesz. Ezek után a különböző pontcsoportok között már különbséget tudunk tenni.

Ha a molekula rendelkezik h-val és v-vel is, akkor a Dnh, ha nincs h-ja, de van v-je, akkor a Cnv és ha van h-ja, de nincs v-je, akkor a Cnh pontcsoportba tartozik. A Dnd és a Dn pontcsoportok között a d szimmetriasíkok létezése alapján teszünk különbséget. A rotsn és a rots2n logikai változók tartalmát a Cnv, az S2n és a Cn pontcsoportok esetén vizsgáljuk meg. A további részletek a pgroup szubrutin forráskódjában megtalálhatók.

************************************************************************ subroutine pgroup(natoms,nat,coord,cord,eig,rotm) ************************************************************************ * Subroutine PGROUP determines the point group symmetries of molecules.* * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8 (a-h,o-z) implicit integer*4(i-n) logical asymm,symm,spher,linear,planar,symcen,planxy,yesno logical planev,rotc2d,planed,rotsn,rots2n character*1 axis(3) common/adat1/ pi,delta dimension eig(3),nrot(10),nsrot(10),nsh(3)

Page 79: Computational Chemistry

Tasi Gyula: Számítógépes kémia

79

dimension coord(3,100),rotm(3,3),store(3) dimension nat(100),c(3,100),cord(3,100) dimension kaxis(180),kplane(180) data nsh/3,2,1/ data axis/'x','y','z'/ if(pi.eq.0.d0) pi=4.d0*datan(1.d0) linear=.false. planar=.false. spher=.false. asymm=.false. symm=.false. symcen=.false. planxy=.false. planev=.false. planed=.false. rotc2d=.false. rotsn=.false. rots2n=.false. yesno=(eig(3)-eig(1)).lt.delta.or.(eig(3)-eig(2)).gt.delta if(.not.yesno) then do i=1,3 call swap(rotm(i,1),rotm(i,3)) end do call swap(eig(1),eig(3)) endif do i=1,natoms do j=1,3 store(j)=coord(j,i) end do do j=1,3 coord(j,i)=0.d0 do k=1,3 coord(j,i)=coord(j,i)+rotm(k,j)*store(k) end do end do end do asymm=(eig(3)-eig(1)).gt.delta.and.(eig(3)-eig(2)).gt.delta.and. $ (eig(2)-eig(1)).gt.delta symm=(dabs(eig(3)-eig(1))).gt.delta.and.(dabs((eig(3)-eig(2))).lt. $ delta.or.(dabs(eig(2)-eig(1))).lt.delta) spher=(dabs(eig(3)-eig(1))).lt.delta linear=(eig(3).lt.delta).and.(dabs((eig(1)-eig(2))).lt.delta) planar=(dabs(eig(3)-eig(2)-eig(1)).lt.delta) $ .and.((eig(3)-eig(2)).gt.delta) write(*,*) if(linear) then c c Linear molecules c do i=1,3 do j=1,natoms c(i,j)=-coord(i,j) end do end do call check(natoms,delta,nat,coord,c,nc) if(nc.eq.natoms) then write(*,'(a)') 'Point group: D_infinite h' else write(*,'(a)') 'Point group: C_infinite v' endif return endif c c Non-linear molecules c c Determination of Cn proper rotation axes

Page 80: Computational Chemistry

Tasi Gyula: Számítógépes kémia

80

c write(*,'(a)') 'Proper rotations: ' naxis=0 do i=3,1,-1 write(*,'(a1,1x,a4)') axis(i),'axis' maxn=8 maxnm1=maxn-1 do j=1,maxnm1 alpha=2.d0*pi/dble(maxn) call rotate(natoms,alpha,coord,c,i) call check(natoms,delta,nat,coord,c,nc) if(nc.eq.natoms) then naxis=naxis+1 nrot(naxis)=maxn write(*,'(a,i2)') ' C',nrot(naxis) endif maxn=maxn-1 end do end do c write(*,'(a)') 'Improper rotations: ' nsaxis=0 do i=3,1,-1 write(*,'(a1,1x,a4)') axis(i),'axis' maxn=8 maxnm1=maxn-1 do j=1,maxnm1 alpha=2.d0*pi/dble(maxn) call rotate(natoms,alpha,coord,cord,i) call rflect(natoms,cord,c,nsh(i)) call check(natoms,delta,nat,coord,c,nc) if(nc.eq.natoms) then nsaxis=nsaxis+1 nsrot(nsaxis)=maxn write(*,'(a,i2)') ' S',nsrot(nsaxis) endif maxn=maxn-1 end do end do c if(naxis.ne.0) then c c Determination of Sn & S2n improper rotation axes c alpha=pi/dble(nrot(1)) do i=1,2 call rotate(natoms,alpha,coord,cord,3) call rflect(natoms,cord,c,1) call check(natoms,delta,nat,coord,c,nc) if(nc.eq.natoms.and.i.eq.1) then rots2n=.true. write(*,'(a)') 'S2n' elseif(nc.eq.natoms.and.i.eq.2) then rotsn=.true. write(*,'(a)') 'Sn' endif alpha=2.d0*alpha end do endif c c Determination of symmetry planes c nplane=0 do i=1,3 call rflect(natoms,coord,c,i) call check(natoms,delta,nat,coord,c,nc)

Page 81: Computational Chemistry

Tasi Gyula: Számítógépes kémia

81

if(nc.eq.natoms) then nplane=nplane+1 if(i.eq.1) planxy=.true. endif end do c c Determination of a symmetry center c do i=1,3 do j=1,natoms c(i,j)=-coord(i,j) end do end do call check(natoms,delta,nat,coord,c,nc) if(nc.eq.natoms) symcen=.true. if(spher) then c c Spherical top molecules c if(.not.symcen) then write(*,'(a)') 'Point group: Td' else yesno=.false. do j=1,naxis if(nrot(j).eq.5) yesno=.true. end do if(yesno) then write(*,'(a)') 'Point group: Ih' else write(*,'(a)') 'Point group: Oh' endif endif elseif(asymm) then c c Asymmetric top molecules c if(naxis.eq.0) then if(nplane.gt.0) then write(*,'(a)') 'Point group: Cs' else if(symcen) then write(*,'(a)') 'Point group: Ci' else write(*,'(a)') 'Point group: C1' endif endif else if(naxis.eq.1) then if(nplane.eq.0) then write(*,'(a)') 'Point group: C2' else if(symcen) then write(*,'(a)') 'Point group: C2h' else write(*,'(a)') 'Point group: C2v' endif endif else if(symcen) then write(*,'(a)') 'Point group: D2h' else write(*,'(a)') 'Point group: D2' endif endif endif elseif(symm) then

Page 82: Computational Chemistry

Tasi Gyula: Számítógépes kémia

82

c c Symmetric top molecules c do i=1,natoms if(coord(1,i).gt.0.d0.and.coord(2,i).gt.0.d0) then nv=i goto 10 elseif(coord(2,i).gt.0.d0) then nv=i endif end do 10 continue rnv=dsqrt(coord(1,nv)**2+coord(2,nv)**2) alpha=dacos(coord(1,nv)/rnv) c c Move atom nv into the xz plane via rotation around the z-axis c call rotate(natoms,alpha,coord,c,3) do i=1,natoms do j=1,3 coord(j,i)=c(j,i) end do end do c c Reflection to the xz-plane c call rflect(natoms,coord,c,2) call check(natoms,delta,nat,coord,c,nc) if(nc.eq.natoms) planev=.true. kinc=1 20 continue ndaxis=0 do k=0,179,kinc alpha=dble(k)*pi/180.d0 call rotate(natoms,alpha,coord,cord,3) call rotate(natoms,pi,cord,c,1) call check(natoms,delta,nat,cord,c,nc) if(nc.eq.natoms) then ndaxis=ndaxis+1 kaxis(ndaxis)=k endif end do if(ndaxis.ne.nrot(1).and.kinc.lt.7) then kinc=kinc+1 goto 20 elseif(ndaxis.eq.nrot(1)) then rotc2d=.true. endif kinc=1 30 continue ndplan=0 do k=0,179,kinc alpha=dble(k)*pi/180.d0 call rotate(natoms,alpha,coord,cord,3) call rflect(natoms,cord,c,2) call check(natoms,delta,nat,cord,c,nc) if(nc.eq.natoms) then ndplan=ndplan+1 kplane(ndplan)=k endif end do if(ndplan.ne.nrot(1).and.kinc.lt.7) then kinc=kinc+1 goto 30 elseif(ndplan.eq.nrot(1)) then planed=.true.

Page 83: Computational Chemistry

Tasi Gyula: Számítógépes kémia

83

endif if(nrot(1).gt.2) then if(planxy.and.planev) then write(*,'(a,i1,a1)') 'Point group: D',nrot(1),'h' return elseif(.not.planxy.and.planev.and..not.rotsn.and..not. $ rots2n) then write(*,'(a,i1,a1)') 'Point group: C',nrot(1),'v' return elseif(.not.planev.and.planxy) then write(*,'(a,i1,a1)') 'Point group: C',nrot(1),'h' return endif else if(naxis.eq.3) then write(*,'(a)') 'Point group: D2d' return endif endif if(rotc2d) then if(planed) then write(*,'(a,i1,a1)') 'Point group: D',nrot(1),'d' return else write(*,'(a,i1)') 'Point group: D',nrot(1) return endif endif if(rots2n) then write(*,'(a,i1)') 'Point group: S',2*nrot(1) return else write(*,'(a,i1)') 'Point group: C',nrot(1) return endif endif return end ************************************************************************ subroutine check(natoms,delta,nat,coord,c,nc) ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) dimension coord(3,100),c(3,100),nat(100) nc=0 do i=1,natoms do 1 j=1,natoms if(nat(i).ne.nat(j)) goto 1 if(dabs(coord(1,i)-c(1,j)).gt.delta) goto 1 if(dabs(coord(2,i)-c(2,j)).gt.delta) goto 1 if(dabs(coord(3,i)-c(3,j)).gt.delta) goto 1 goto 2 1 continue return 2 nc=nc+1 end do return end

Használjuk most a MATHEMATICA programot molekulák szimmetriájának tanulmá-nyozására! W.M. MCCLAIN könyve [W.M. McClain: Symmetry Theory in Molecular Physics with Mathematica; Springer Science+Business Media: Dordrecht (2009)] és a könyvhöz tartozó CD-n levő két MATHEMATICA programcsomag ebben nagy segítséget jelent.

Page 84: Computational Chemistry

Tasi Gyula: Számítógépes kémia

84

Nézzük meg hogyan jelennek meg a molekulák és tulajdonságaik a MATHEMATICA programkörnyezetében!

Page 85: Computational Chemistry

Tasi Gyula: Számítógépes kémia

85

Page 86: Computational Chemistry

Tasi Gyula: Számítógépes kémia

86

Ebből a kis példából is látható, hogy a MATHEMATICA program mind kezdő, mind haladó szinten hasznos lehet kémiával foglalkozó hallgatók, oktatók és kutatók számára. Sajnos, bizonyos funkciók internetes kapcsolat nélkül nem élnek a programban. Az sem világos teljesen, hogy a felhasználók által bevitt molekulák pontosan hol tárolódnak.

Határozzuk meg a korábbi projektekben tanulmányozott molekulageometriák pontcso-portját a pgroup szubrutin segítségével! Bevive őket a MATHEMATICA programba, meg tudjuk jeleníteni őket, s további számításokat is tudunk rajtuk végezni. Az egyszerűség kedvéért vigyük be a vízmolekula experimentális geometriáját. (Bár már van egy víz a kata-lógusban, de mintha valami gond lenne vele.) Először egy megfelelő listát kell készítenünk:

waterList={ {"H",{0.918198,-0.051922,0.000000},{"1","C2v"}}, {"O",{0.040202,-0.051922,0.000000},{"1"}}, {"H",{0.280166,0.875851,0.000000},{"2"}}};

Ezután hozzá kell adnunk az új listát a katalógushoz:

ListToMolecule[waterList,"H2O"]

Majd nézzük meg, hogy megtörtént-e a hozzáadás:

MoleculeToList["H2O"] // GridForm

Örömmel konstatálhatjuk, hogy igen.

Page 87: Computational Chemistry

Tasi Gyula: Számítógépes kémia

87

7. Transzcendens és nemlineáris egyenletek számítógépes megoldása Kémiai és fizikai problémák megoldásakor gyakran jutunk nemlineáris algebrai vagy

transzcendens egyenlet(ek)hez. Lineáris algebrai egyenletrendszerek (MK: 1-4.) hatékony numerikus megoldásával a későbbiekben foglalkozunk.

A transzcendens egyenleteknek három fajtája a legismertebb: a trigonometrikus, a logarit-mikus és az exponenciális egyenletek. A nemlineáris algebrai és a transzcendens egyenleteket az esetek többségében iteratíve oldjuk meg számítógéppel. Kiindulunk a megoldás (gyök) egy jó közelítéséből, amit behelyettesítünk egy az egyenletünkből levezetett formulába, s egy újabb értéket kapunk. Az eljárást addig folytatjuk, amíg kellő pontosságú megoldáshoz jutunk vagy észrevesszük, hogy az eljárásunk nem konvergál, és befejezzük azt.

Egy másik lehetőség az intervallum-felezés módszerének az alkalmazása. Ez a módszer csak akkor alkalmazható, ha a keresett gyök jelváltási hely. A módszer csak a függvény előjelére támaszkodik, az értékeire nem. A konvergencia lassú, viszont a feladattól függet-lenül tökéletesen biztonságos, robosztus. Először a gyököt tartalmazó ,a bx x jelváltási intervallumot kell meghatároznunk ( ( ) ( )a bf x f x ). Majd kiszámítjuk az intervallum felező-pontját (xf) és a felezőpontban a függvényértéket (f(xf)). Ha ( ) 0ff x , akkor az új alsóhatár az xf lesz. Ellenkező esetben xf az új felsőhatár lesz. A felezést kellő pontosság eléréséig folytatjuk.

A következőkben két eljárást mutatunk be: a feloszt() szubrutint és a gyok() függvényt. Az előbbi egy intervallumot meghatározott számú részintervallumra oszt fel, majd meghatározza, hogy a részintervallumok közül melyek jelváltási intervallumok. Az utóbbi a jelváltási intervallumokban felezési módszerrel kellő pontossággal lokalizálja a gyököt.

c********************************************************************** subroutine feloszt(a,b,n,xa,xb,nr) c********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter(maxnr=100) dimension xa(maxnr),xb(maxnr) nrr=0 x=a dx=(b-a)/n fa=fx(x) do i=1,n x=x+dx fb=fx(x) if(fb*fa.lt.0.d0) then nrr=nrr+1 xa(nrr)=x-dx xb(nrr)=x if(nrr.eq.nr) goto 5 endif fa=fb end do 5 continue nr=nrr return end

Page 88: Computational Chemistry

Tasi Gyula: Számítógépes kémia

88

Látható. hogy a szubrutin az fx() függvény meghívása révén jut hozzá az x pontban a függvényértékhez. A meghatározandó gyökök maximális számát 100-ra állítottuk. Ha a szubrutin megtalálta már az inputban kért nr számú gyököt, akkor nem folytatja tovább a részintervallumok vizsgálatát. A gyok() függvény listája:

c********************************************************************** function gyok(x1,x2) c********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter (jmax=40,xtol=1.d-10) fkoz=fx(x2) f=fx(x1) if(f*fkoz.ge.0.d0) stop 'Nincs gyok!' if(f.lt.0.d0) then gyok=x1 dx=x2-x1 else gyok=x2 dx=x1-x2 endif do j=1,jmax dx=0.5d0*dx xkoz=gyok+dx fkoz=fx(xkoz) if(fkoz.le.0.d0) gyok=xkoz if(dabs(dx).lt.xtol.or.fkoz.eq.0.d0) return end do stop 'Tul sok felezes!' end

A gyok() függvény lokalizálja az [x1,x2] intervallumban a kérdéses gyököt. Először ellen-őrzi az intervallum megfelelő mivoltát (jelváltás), majd ha szükséges felcseréli a két vég-pontot. Ezután felezéssel kellő pontosságig (xtol) meghatározza a gyököt.

Határozzuk meg pl. a következő meglehetősen kellemetlen transzcendens függvény valós gyökeit [F.S. Acton: Numerical Methods That Work, The Mathematical Association of America, Washington D.C., (1990)]:

2 30.6 1.3 2.0 0.01234 ln .f x x x x x

Készítsük el az fx() függvényt a függvényértékek számításához:

c********************************************************************** function fx(x) c********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) fx=(x-0.6d0)*(x-1.3d0)**2*(x-2.0d0)**3+0.01234d0*dlog(x) return end

A vizsgálni kívánt intervallum meghatározása érdekében ábrázoljuk a függvényt a MATHEMATICA program segítségével! A MATHEMATICA program használatát a követ-kező könyv és a hozzá tartozó notebook fájl (Joy of Mathematica.nb) még kényel-mesebbé teszi: A. Shuchat, F. Shultz: The Joy of Mathematica, Instant Mathematica for Calculus, Differential Equations, and Linear Algebra, Harcourt/Academic Press, San Diego,

Page 89: Computational Chemistry

Tasi Gyula: Számítógépes kémia

89

2nd edition (2000). Természetesen, ezen segédeszköz nélkül is könnyen végre tudjuk hajtani a feladatot. A következő utasítást kell kiadnunk:

> Plot[(x-0.6) (x-1.3)2 (x-2.0)3+0.01234 Log[x],{x,0.4`,2.5`},AxesLabel->

{"x","f(x)"}]

Egy kis ügyes programmal a grafikont szöveges képernyőn is megjeleníthetjük:

7.837E-02 x----------------------------------------------------------l l l l l l l l l l l l l lx x l xxxl l xxxxxxx xxxxxxxxxxxxxx l ----------------------xxx-------xxxxxxxxxx------------------ l x xx l l xx l l x l l x l l x x l l x l l x x l l x l l x x l -9.196E-02 l-----xxxxx------------------------------------------------l 5.500E-01 2.200E+00

A grafikonok alapján a választott intervallum: [0.5,2.2]. A következő főprogrammal elvégez-hetjük a számítást:

c********************************************************************** program main c********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter(maxnr=100) dimension xa(maxnr),xb(maxnr),xr(maxnr)

1.0 1.5 2.0 2.5x

-0.05

0.05

0.10

0.15

fx

Page 90: Computational Chemistry

Tasi Gyula: Számítógépes kémia

90

a=0.5d0 b=2.2d0 n=50 nr=10 call feloszt(a,b,n,xa,xb,nr) write(*,'(/a,i3)') 'A gyokok szama: ',nr do i=1,nr xr(i)=gyok(xa(i),xb(i)) write(*,'(5f13.5)') xr(i),fx(xr(i)) end do end

A főprogramot, a feloszt() szubrutint és a gyok() függvényt együtt bisect.f fájl-ként mentjük el. Lefordítva a bisect.f fájlt, a bisect.exe program futtatásával meg-kaphatjuk a gyököket: 0.59535, 1.21121, 1.54950, 1.59331.

Szélsőérték-feladatoknál és függvények analízisénél szükségünk van a függvény első és magasabbrendű deriváltjaira. Ezeket a deriváltakat numerikusan is meghatározhatjuk. Például az első derivált értékét az x0 pontban a következő ún. 2-pontos formulával számíthatjuk:

0 00

( ) ( )( ) ,

2

f x h f x hf x

h

ahol a h ellépést megfelelő hosszúságúnak választjuk. Növelve a pontok számát, az első derivált értékét egyre pontosabban meg tudjuk határozni. A magasabbrendű deriváltak értékének a számítására is levezethetők megfelelő formulák [Abramowitz, M., Stegun, I.A.: Handbook of Mathematical Functions, Dover Publications, New York (1965)]. Itt csak az első derivált értékének a számítására mutatunk be egy függvényt:

************************************************************************ function dfx(x) ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) data dx/0.001d0/ x0=x x1=x0+dx xm1=x0-dx f1=fn(x1) fm1=fn(xm1) dfx=(f1-fm1)/(x1-xm1) x=x0 return end

A dfx számításánál miért nem 2dx-szel osztunk? Látható, hogy az fx() függvény helyett az fn() függvényt hívjuk meg. A numerikus deriváltak számításánál ugyanis mindig az eredeti függvényünket kell használnunk. Az fx() függvényben pedig előfordulhat, hogy mást (pl. deriváltat).

c********************************************************************** function fn(x) c********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) fn=(x-0.6d0)*(x-1.3d0)**2*(x-2.0d0)**3+0.01234d0*dlog(x) return

Page 91: Computational Chemistry

Tasi Gyula: Számítógépes kémia

91

end

A dfx() függvény felhasználásával határozzuk meg az előző függvény összes stacionárius pontját is! A stacionárius pontok az első derivált gyökei ( 0f x ), így az fx() függvényt módosítanunk kell:

c********************************************************************** function fx(x) c********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) fx=dfx(x) return end

Ezzel a módosítással már a numerikus első derivált gyökeit fogjuk megkapni intervallum-felezéssel. Az fn() függvény nem változik.

A numerikus deriváltnál természetesen mindig pontosabb az analitikus derivált.

Ha a deriválást könnyen végre tudjuk hajtani, akkor érdemes analitikus deriváltat használni a numerikus helyett. A numerikus első derivált függvény gyökei, azaz a stacionárius pontok a [0.5,2.2] intervallumban: 0.75884, 1.32141, 1.57152. Ha kiszámítjuk a második derivált értékét a kapott pontokban (4.28138, 0.39941, 0.23494), akkor kiderül, hogy az első pont lokális minimum, a második lokális maximum és a harmadik lokális minimum. Hogyan tudnánk meghatározni az összes inflexiós pontot is? Kiegészítésképpen lásd az (MK: 2-7.) fejezetet.

Vegyünk most egy feladatot a művelettan területéről! Folyamatos működésű, izoterm tankreaktorban a következő konszekutív reakciókat (MK: 2-6.) hajtjuk végre:

1 2

A P B,k k

ahol -11 1.0d2*dexp( 2.0d3 / ) sk T és -1

2 1.4d3*dexp( 6.5d3 / ) s .k T Határozzuk meg a reaktor azon optimális hőmérsékletét, melynél stacionárius üzemmódban, 240 s tartózko-dási időnél a kilépő P termék koncentrációja maximális! Írjuk fel először is a mérlegegyen-leteket a reaktorra:

0 1

A 1A A ;

dr

dt

1 2

P 1P ,

dr r

dt

ahol 0A az A komponens koncentrációja a belépő oldatban; A és P a megfelelő kilé-

pési koncentrációk. Stacionárius üzemmód esetén mindkét összefüggés zéróval lesz egyenlő. Ez alapján meg tudjuk határozni a P termék stacionárius kilépő koncentrációját:

1

01 2

P A .1 1stac

k

k k

Ennek a függvénynek kell meghatároznunk a maximumát T függvényében. Másoljuk át a bisect.f fájlt a tank.f fájlba, majd az előzőeknek megfelelően módosítsuk a tank.f

Page 92: Computational Chemistry

Tasi Gyula: Számítógépes kémia

92

forráskódot. A tank.exe program futtatásával határozzuk meg az optimális hőmérsékletet ( 354.2 KoptT )!

Az intervallum-felezéses módszer nem tud megbírkózni az olyan gyökökkel, melyek egyben lokális extrémumok is. Határozzuk meg pl. a következő polinom gyökeit:

3 3 2.p x x x

Az intervallum-felezéses módszerrel egyetlenegy gyököt találunk a [-3,2] intervallumban: 2. A másik, kétszeres, másodrendű gyököt azonban nem tudjuk lokalizálni. Egy gyökről, akkor mondjuk, hogy m-edrendű, ha ( 1) ( )( ) 0; ( ) 0; ; 0; 0.m mf x f x f x f x Behe-lyettesítéssel könnyen megmutatható, hogy 1x kétszeres, másodrendű gyöke a polinom-nak. Ebben az esetben más módszer után kell néznünk.

Ha jobban ismerjük a függvényünk természetét, akkor érdemes olyan módszert alkal-mazni, amely az első deriváltat is felhasználja. A NEWTON-RAPHSON-módszer valószínűleg a leggyorsabb ilyen típusú módszer. A módszer titka a függvény érintőjének az alkalmazásában rejlik. A kérdéses gyök közelítésére felvett pontban érintőt szerkesztünk a függvényhez, majd meghatározzuk, hogy az hol metszi az x-tengelyt. Ez a pont lesz a gyök következő közelítése. Ennek megfelelően a NEWTON-RAPHSON-módszer a következő egyenletet alkalmazza iteratíve:

1 .i

i ii

f xx x

f x

A kérdéses eljárást könnyen szubrutinba önthetjük:

c********************************************************************** subroutine newton(x,xtol,maxit) c********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) write(*,'(a8,8x,a1,17x,a4)') 'Iteracio','x','f(x)' x1=x do i=1,maxit f=fx(x1) write(*,'(i3,2f20.12)') i,x1,f fp=dfx(x1) x2=x1-f/fp if((dabs(x1-x2).le.xtol).or.(f.eq.0.d0)) then x=x2 return endif x1=x2 end do stop 'Tul sok iteracio. Az NR-eljaras megallt.' return end

A NEWTON-RAPHSON-módszer konvergenciája a keresett gyök közelében kvadratikus: ha az eredményünk már két számjegyre pontos, akkor minden iterációval megduplázódik a pontos számjegyek száma. A newton() szubrutin segítségével is határozzuk meg a fejezet elején tanulmányozott transzcendens függvény zérushelyeit!

Page 93: Computational Chemistry

Tasi Gyula: Számítógépes kémia

93

Az előbbi harmadfokú polinom gyökei esetén vizsgáljuk meg a módszer konvergenciáját. Legyen xtol = 1.d-14 és maxit = 100. Először 3.0-ból indítjuk az eljárást:

Iteracio x f(x) 1 -3.000000000000 -16.000000000000 2 -2.333333333333 -3.703703703704 3 -2.055555555556 -0.518689986283 4 -2.001949317739 -0.017566666094 5 -2.000002528298 -0.000022754720 6 -2.000000000004 -0.000000000038 7 -2.000000000000 0.000000000000

Látható, hogy az eljárás 7 lépésben konvergál. Indítsuk most az eljárást 1.5-ből:

Iteracio x f(x) 1 1.500000000000 0.875000000000 2 1.266666666667 0.232296296296 3 1.138562091503 0.060258675997 4 1.070777335656 0.015382847924 5 1.035791852271 0.003889021459 6 1.018000803974 0.000977919613 7 1.009027163534 0.000245204665 8 1.004520342061 0.000061392843 9 1.002261869981 0.000015359739 10 1.001131360847 0.000003841380 11 1.000565787028 0.000000960526 12 1.000282920183 0.000000240154 13 1.000141466761 0.000000060041 14 1.000070735048 0.000000015011 15 1.000035367941 0.000000003753 16 1.000017684076 0.000000000938 17 1.000008842062 0.000000000235 18 1.000004421030 0.000000000059 19 1.000002210515 0.000000000015 20 1.000001105240 0.000000000004 21 1.000000552660 0.000000000001 22 1.000000276239 0.000000000000 23 1.000000138251 0.000000000000 24 1.000000069188 0.000000000000 25 1.000000034421 0.000000000000 26 1.000000018294 0.000000000000 27 1.000000008179 0.000000000000

Az eljárás megtalálja a kérdéses gyököt, azonban sokkal több lépésben! Többszörös rendű gyökök esetén azonban lehetőségünk van a konvergencia gyorsítására. Ha a keresett gyök m-edrendű, akkor a következő formula alkalmazható:

1 .i

i ii

f xx x m

f x

Jelen esetben a gyök másodrendű ( 2m ). Ennek megfelelően módosítsuk a newton() szubrutinunkat, s végezzük el újból a gyök meghatározását:

Iteracio x f(x) 1 1.500000000000 0.875000000000 2 1.033333333333 0.003370370370 3 1.000182149362 0.000000099541 4 1.000000005529 0.000000000000

Page 94: Computational Chemistry

Tasi Gyula: Számítógépes kémia

94

Látható, hogy jelentősen gyorsabb lett a konvergencia: 4 iteráció elegendőnek bizonyult!

Feladatok:

7.1 Készítsünk egy pufferoldatot! A kiindulási koncentrációk legyenek a következők:

3 33 4 0 3 4 0H PO 1 mol/dm ; Na PO 1 mol/dm .A Bc c

Határozzuk meg a pufferoldat pH-ját úgy, hogy semmiféle elhanyagolással sem élünk! A következő adatokat tudjuk:

1 2

3

lg 2.15; lg 7.20;

lg 12.35; lg 14.0v

K K

K K

Segítség: A hidrogénion koncentrációjára egy ötödfokú polinomot kapunk (x = [H+]):

5 4 31 1 2

21 2 3

1 2 3 1 2 3

3 3

3 2

3 3 ,

B B A B v

B A B v

B A B v v

x K c x K K c c c K x

K K K c c c K x

K K K c c c K x K K K K

aminek meg kell határoznunk a kérdéses gyökét (lásd a 8. projektet is!).

7.2 Határozza meg a következő függvény valós gyökeit:

1.xf x x e

7.3 Határozza meg a n-bután moláris térfogatát 373.15 K hőmérsékleten és 1.0 MPa nyomá-son a VAN DER WAALS-egyenlet segítségével:

2,m

m

ap V b RT

V

ahol

6 2 4 31.38 m Pa mol ; 1.163 10 m mol; 8.314472 J mol K .a b R

A Vm közelítő értékének meghatározásához használja a tökéletes gázokra vonatkozó állapot-egyenletet!

7.4 Határozza meg a következő polinom valós gyökeit:

5 4 3 28 25 38 28 8.p x x x x x x

7.5 Határozza meg a következő függvény valós gyökeit:

arctg 1.5.xf x e x

Page 95: Computational Chemistry

Tasi Gyula: Számítógépes kémia

95

8. Neutralizációs titrálási görbék számítógépes szimulációja

A neutralizációs (sav-bázis) titrálások fontos szerepet játszanak a kvantitatív kémiai ana-lízisben. A neutralizációs titrálási görbe a titrált elektrolit pH-ját ábrázolja a hozzáadott elektrolit térfogatának vagy a semlegesítés %-ban megadott mértékének a függvényében. A görbe megrajzolható mérési adatok alapján vagy előállítható tisztán számítások segítségével. Akár erős, akár gyenge elektrolitot titrálunk, a mérőoldat mindig erős elektrolit. A számítás lényegesen bonyolultabb, ha erős elektrolit helyett gyenge elektrolitot titrálunk. Itt csak a leg-bonyolultabb esetet vizsgáljuk: gyenge elektrolit (pl. 3 4H PO ) vizes oldatát titráljuk erős elek-trolit (pl. NaOH ) vizes oldatával.

Alkalmazzuk a “teljes indukció” módszerét! Először az egyértékű, majd a kétértékű, s végül a háromértékű gyenge sav példáját tekintjük. Az eredményekből ezután “extrapolálni” fogunk az n-értékű gyenge sav esetére.

Tekintsünk egy egyértékű gyenge savat (HA) és annak oldódását vízben! A sav vízben részlegesen elektrolitikusan disszociál:

2 3

1

1

HA + H O H O A .k

k

Figyelembe kell azonban vennünk a víz autoprotolízisét is:

2 2 3

2

2

H O + H O H O OH .k

k

Az oldatban első közelítésben 5 komponens van jelen ( 5K ), melyek között 4 reakció játszódik le ( 4R ). A tömeghatás törvényét alkalmazva írjuk fel az első két reakció sebessé-gét (MK: 2-6.):

1 1 2

1 1 3

HA H O ;

H O A .

r k

r k

Egyensúly esetén a két sebesség megegyezik, így írhatjuk, hogy

1 2 1 3HA H O H O A .k k

Az összefüggés átrendezésével kapjuk, hogy:

31

11 2

H O A.

HA H O

kK

k

Híg oldat esetén [H2O] nagy és állandó, így értéke belefoglalható az egyensúlyi állandó érté-kébe:

1 1 2

H AH O ,

HAK K

ahol K1 a gyenge sav disszociációs egyensúlyi állandója, és a hidroxónium-ion molekula-képlete helyett az egyszerűség kedvéért a hidrogénion szimbólumát használjuk. Hasonló-an eljárva a másik két reakció esetén, eljuthatunk a víz ionszorzatának a fogalmához:

H OH .vK

Page 96: Computational Chemistry

Tasi Gyula: Számítógépes kémia

96

Szobahőmérsékleten ( 298.15 KT ) Kv értéke 141.0 10 , így a pH = 7 értéket tekintjük sem-leges kémhatásnak. Ideális körülmények között ennyi a desztillált víz pH-ja szobahőmér-sékleten. Végül is 4 komponensünk marad, és 2 disszociációs egyensúllyal (egyensúlyi állan-dóval) számolhatunk. További két mérlegegyenletet tudunk azonban felállítani:

0HA HA A ;

H A OH ,

ahol [HA]0 a gyenge sav kiindulási koncentrációja. Az első mérlegegyenlet a sav mennyi-ségére, a második a töltésekre vonatkozik. Ennek megfelelően a 4 komponens koncentrá-ciójára 4 egyenletet tudunk felállítani, így az ismeretlen koncentrációk meghatározhatók.

Ha MOH erős bázissal (pl. NaOH) titráljuk a gyenge egyértékű savunkat, akkor egy újabb komponens (M+) kerül a rendszerbe, aminek a koncentrációját azonban pontosan ismerjük. A titrált sav pH-ját a hozzáadott méroldat térfogatának a függvényében kell számítanunk. Alkal-mazzuk a következő jelöléseket: CA a sav moláris koncentrációja a mérőoldat hozzáadása előtt; CB a bázis normalitása a mérőoldatban ([M+]); VA a titrálandó sav kiindulási térfogata; VB a hozzáadott mérőoldat térfogata; cA a sav moláris koncentrációja a mérőoldat hozzáadása után az oldatban és cB a bázis normalitása az oldatban. Ennek megfelelően

;

,

A AA

A B

B BB

A B

V Cc

V V

V Cc

V V

ahol VA+VB a titrált oldat teljes térfogata. Titráláskor az előző mérlegegyenletek következő-képpen módosulnak:

HA A ;

H M H A OH .

A

B

c

c

Jelőlje x, y és z rendre a következő koncentrációkat: [H+], [HA], [A]. Így

1

1

1

1

OH ;

;

;

,

v

A

A

v vAB

K

xy c z

K cz

K x

K KK cc x z

x K x x

amiből x-re egy harmadfokú egyenletet kapunk: 3 2

1 2 3 0,x a x a x a

ahol

1 1 ;Ba K c

2 1 ;B A va K c c K

3 1 .va K K

Page 97: Computational Chemistry

Tasi Gyula: Számítógépes kémia

97

Ha a titrálandó gyenge savunk kétértékű, akkor az előző összefüggéseink következő-képpen alakulnak:

12

H HA;

H AK

2

2

H A;

HAK

H OH ;vK

22

2

H A HA A ;

H M H HA 2 A OH .

A

B

c

c

Az 5 ismeretlen koncentrációra 5 egyenletünk van. Elemi algebrai átalakításokkal a hidrogén-ion koncentrációjára egy negyedfokú egyenletet kapunk:

4 3 21 2 3 4 0,x a x a x a x a

ahol

1 1 ;Ba K c

2 1 2 ;B A va K K c c K

3 1 2 2 ;B A va K K c c K

4 1 2 .va K K K

Már látszik valamilyen szisztéma a koefficiensekre. Nem meglepő módon a háromértékű gyenge sav esetén egy ötödfokú egyenlet adódik a hidrogénion koncentrációjára a következő koefficiensekkel:

1 1 ;Ba K c

2 1 2 ;B A va K K c c K

3 1 2 3 2 ;B A va K K K c c K

4 1 2 3 3 ;B A va K K K c c K

5 1 2 3 .va K K K K

Az előzőekből “indukció” alapján n-értékű sav esetén egy (n+2)-edfokú egyenletet kapunk az alábbi koefficiensekkel:

1 1 ;Ba K c

2 1 2 ;B A va K K c c K

1 2 2 1 1 (3 );m m m m B A va K K K K K c m c K m n

1 1 2 1 ;n n n B A va K K K K c nc K

2 1 2 .n n va K K K K

Page 98: Computational Chemistry

Tasi Gyula: Számítógépes kémia

98

A kérdéses egyenlet megfelelő gyökének a meghatározására a NEWTON-RAPHSON-módszert alkalmazhatjuk. Jó kiindulási értékkel messze ez a leggyorsabb módszer. Egy jó közelítést pedig könnyű találni. Írjunk egy szubrutint a koefficiensek meghatározására!

c*********************************************************************** subroutine phcoeff(np,ca,cb,kv,k,a) c*********************************************************************** implicit none integer*4 np,i,j real*8 k(*),a(*),ca,cb,kv,kprod c c np: a gyenge sav ertekusege c ca: a sav molaritasa az oldatban c cb: a bazis normalitasa az oldatban c kv: a viz ionszorzata c k(): az egyensulyi allandok 1D blokkja c a(): a koefficiensek 1D blokkja c a(1)=k(1)+cb if(np.eq.1) then a(2)=k(1)*(cb-ca)-kv a(3)=-k(1)*kv elseif(np.eq.2) then a(2)=k(1)*(k(2)+cb-ca)-kv a(3)=k(1)*(k(2)*(cb-2.d0*ca)-kv) a(4)=-k(1)*k(2)*kv elseif(np.eq.3) then a(2)=k(1)*(k(2)+cb-ca)-kv a(3)=k(1)*(k(2)*(k(3)+cb-2.d0*ca)-kv) a(4)=k(1)*k(2)*(k(3)*(cb-3.d0*ca)-kv) a(5)=-k(1)*k(2)*k(3)*kv else a(2)=k(1)*(k(2)+cb-ca)-kv do i=3,np kprod=1.d0 do j=1,i-2 kprod=kprod*k(j) end do a(i)=kprod*(k(i-1)*(k(i)+cb-(i-1)*ca)-kv) end do kprod=kprod*k(np-1) a(np+1)=kprod*(k(np)*(cb-np*ca)-kv) kprod=kprod*k(np) a(np+2)=-kprod*kv endif return end

A főprogram és a megfelelő fx() és dfx() függvények elkészítése után a newton() szubrutint alkalmazhatjuk gyenge savak pH-jának és erős bázissal való titrálási görbéinek a számítására.

c*********************************************************************** program main c*********************************************************************** implicit none integer*4 np,n,maxnp,i,j,m,maxit parameter(maxnp=10) real*8 k(maxnp),a(maxnp+2),ca,cb,xtol

Page 99: Computational Chemistry

Tasi Gyula: Számítógépes kémia

99

real*8 ca0,cb0,va,vb,x,kv,vtot data xtol,maxit/1.d-16,100/ save a,k,kv,np,xtol,maxit,n,ca0,cb0 np=3 ! a sav ertekusege n=np+2 ! a polinomialis egyenlet fokszama m=400 ! a titralasi lepesek (alikvotok) szama ca0=0.1d0 ! a sav kiindulasi molaritasa cb0=0.1d0 ! a merooldat normalitasa va=10.d0 ! a titralando oldat kiindulasi terfogata vb=0.1d0 ! az alikvot terfogata k(1)=10.d0**(-2.15) ! foszforsav pK1=2.15 k(2)=10.d0**(-7.20) ! foszforsav pK2=7.20 k(3)=10.d0**(-12.35) ! foszforsav pK3=12.35 kv=10.d0**(-14.0) ! a viz ionszorzata pKv=14.0 x=1.d0 do i=1,m vtot=va+dble(i)*vb ca=va*ca0/vtot cb=dble(i)*vb*cb0/vtot call phcoeff(np,ca,cb,kv,k,a) call newton(x,xtol,maxit,n,a) write(*,'(3f18.6)') dble(i)*vb,-dlog10(x),14.d0+dlog10(x) end do end

Itt bemutatunk egy új megjegyzési lehetőséget is. A “!” jel segítségével a fordító számára értelmes sorban is készíthetünk comment-et. Ez csak a FORTRAN 90 verziótól kezdve hasz-nálható.

Példaként titráljunk meg 10.0 cm3 0.1 M H3PO4-et 0.1 M-os NaOH-val. A foszforsav disszociációs egyensúlyi állandói: pK1 = 2.15, pK2 = 7.20 és pK3 = 12.35. A mérőoldatot 0.1 cm3-ként adagoljuk a titrálandó oldathoz. Írjuk ki ASCII fájlba a számítási eredményeket, s jelenítsük meg őket grafikusan!

Page 100: Computational Chemistry

Tasi Gyula: Számítógépes kémia

100

Szebb ábrát is kaphatunk, ha az inflexiós pontok környékén több pontot veszünk fel. Az ekvivalencia (inflexiós) pontoknak megfelelő pH-értékek: 4.70, 9.66 és 12.18. A titrálási görbe ismerete nagy segítséget nyújt a megfelelő indikátor kiválasztásában: olyan indikátor használható csak az ekvivalencia pont indikálására, amelynek teljes átcsapási intervalluma a görbe meredek szakaszára esik.

A titrálási görbe alakját és a változás nagyságát az ekvivalencia pontban az oldat hőmér-séklete is befolyásolja. A jelenség magyarázata az, hogy a víz ionszorzata függ a hőmérsék-lettől. Jó közelítéssel a következő formula érvényes:

2

vpK ,273.15

aT bT c

T

ahol a = 0.0170687527, b = 3.228524093, c = 4081.64361 és T-t Celsius-fokban vesszük. A kérdéses formula alapján írjon egy szubrutint Kv számítására, majd vizsgálja meg, hogy a hőmérséklet emelkedésével hogyan változik a pH-ugrás mértéke az ekvivalencia pontban!

Ezek után felmerül a kérdés: Mi változik az eredményeinkben, ha gyenge sav helyett gyenge bázist titrálunk erős savval? A probléma szimmetriája miatt tulajdonképpen semmi: felcsereréljük a szerepeket, s pH helyett pOH-t számolunk. Ennek megfelelően az előző programunk ebben az esetben is alkalmazható.

A teljesség kedvéért érdemes lenne azt az esetet is tárgyalni, amikor gyenge elektrolitot titrálunk gyenge elektrolittal. Ennek a problémának a megoldását olvasóra bízzuk.

Feladatok:

8.1 Határozza meg az ecetsav különböző molaritású vizes oldatainak a pH-ját a 108 1 M tartományban (pK = 4.75)! Vesse össze a számítási eredményeket a különböző közelítő for-mulákkal számított értékekkel!

8.2 10.0 cm3 0.1 N NH4OH (pK = 4.75) oldathoz a titrálás előtt 20.0 cm3 desztillált vizet adunk, majd az oldatot 0.1 N sósavval titráljuk. (a) Mennyi a kiindulási oldat pH-ja?; (b) 6.0 cm3 sósav mérőoldat hozzáadása után hogyan változik az oldat kémhatása?; (c) A tritrálás ekvivalencia pontjában mekkora lesz az oldat pH-ja? és (d) 11.0 cm3 sósav mérőoldat fogyása után milyen lesz az oldat kémhatása?

8.3 A fentiekben foglalkoztunk a pKv hőmérsékletfüggésével. Hogyan tudjuk a kérdéses for-mulát hőmérséklet meghatározására felhasználni?

8.4 Az előzőekben a [H+] meghatározása volt a célunk. Írjon egy szubrutint, ami az oldatban jelenlévő többi komponens egyensúlyi koncentrációját is meghatározza!

8.5 Titráljon meg 10.0 cm3 0.1 M citromsavat 0.1 M-os NaOH-val. A citromsav disszociációs egyensúlyi állandói: pK1 = 3.13, pK2 = 4.76 és pK3 = 6.40. A mérőoldatot 0.1 cm3-ként adagolja a titrálandó oldathoz. Írja ki ASCII fájlba a számítási eredményeket, és ábrázolja a pH vs. VB titrálási görbét! Határozza meg az ekvivalencia pontok pH-értékeit! Igaz a következő állítás az első ekvivalencia pont pH-jára:

11 22pH pK pK ?

Page 101: Computational Chemistry

Tasi Gyula: Számítógépes kémia

101

9. Jelsorozatok számítógépes feldolgozása Kísérleti tevékenység vagy számítás eredményeként gyakran egy {(xi,yi), i = 1,2,…,m}

ponthalmazt (jelsorozatot) kapunk. A változók között feltételezünk egy y = f(x) függvény-kapcsolatot, ami azonban pontosan nem ismert vagy érdektelen számunkra. Ilyenkor magából a jelsorozatból kell következtetnünk a kérdéses kapcsolatra.

A jelsorozat kiértékelésével kapcsolatos alapvető feladatok: (1) függvényértékek számítá-sa közbenső pontokban (interpoláció); (2) függvényértékek helyettesítése a mérési hibák kie-gyenlítése érdekében (simítás); (3) az f x derivált számítása (numerikus differenciálás) és (4) a jelsorozat numerikus integrálása (adott intervallumra vonatkozó határozott integrál szá-mítása). Előfordulhat, hogy a jelfeldolgozás az esetleges simításon túl is igényel paraméter-becslési eljárást: pl. különböző spektrumok, kromatogramok felbontása GAUSS-, LORENTZ- vagy egyéb típusú görbék összegére (dekonvolúció).

Mivel a kérdéses pontok között az f függvényről semmi információnk sincs, az (1)-(3) feladatok megoldásához egy közelítő függvényre, általában valamilyen polinomra van szükségünk. Globális interpolációról van szó, ha az interpoláló függvény meghatározásához a jelsorozat minden pontját egyidejűleg felhasználjuk. Az interpoláció lokális, ha a vizsgált érték körül csak néhány pontot (n < m) használunk fel. Legegyszerűbb a lineáris (n = 2), a kvadratikus (n = 3) és a köbös (n = 4) interpoláció. Az interpoláló függvény meghatározása után a deriválás és az integrálás ezen a függvényen végezhető el. Gyakran figyelembe vesszük azt is, hogy a függvényértékek mérési hibákkal terheltek, így az interpoláló függvény meghatározása paraméterbecslési feladatot jelent. Ebben az esetben nem követeljük meg, hogy a közelítő függvény minden ponton átmenjen. Ezt a feladatot simításnak nevezzük. A simítás is az interpolációhoz hasonlóan lehet globális vagy lokális. A simító függvény deriválásával kapott értékek általában kevésbé érzékenyek a mérési hibákra.

Azt, hogy mikor milyen módszert használunk a közelítésre, elsősorban a jelsorozat tulajdonságai határozzák meg: (1) rövid adatsor (5-15 pont) esetén globális interpoláció vagy globális simítás alkalmazható attól függően, hogy az adataink hibamentesek vagy hibával terheltek, azaz zajosak; (2) közepes hosszúságú adatsor (15-50 pont) esetén már lokális interpolációt vagy lokális simítást is használhatunk: a kérdéses pont környezetében levő 3-6 pontra illesztjük a közelítő polinomot; (3) hosszú adatsor ( > 50 pont) esetén a mérési hiba általában már jelentős, így lokális simítást alkalmazunk. Az alappontok általában ekvidisz-tánsak, így a jelsorozat {yi} értékei mellett csak a h (= xi+1 – xi) mintavételezési távolságot kell nyilvántartanunk.

Interpolálásra általában a LAGRANGE- vagy a NEWTON-féle interpolációs formulákat alkalmazzuk. Az utóbbit sokan előnyben részesítik, mivel kisebb számításigényű és a jelsoro-zatot egy újabb alapponttal kiegészítve az eredeti interpoláló polinomhoz csak egy új tagot kell hozzáadni, a többi változatlan marad.

Hosszú adatsorok esetén tehát általában lokális simítást alkalmazunk: az x0 körüli ekvi-disztáns (x-m,y-m), …, (x0,y0), …, (xm,ym) pontokra (h = xi+1 – xi) illesztünk n < 2m fokszámú polinomot a legkisebb négyzetek módszerével (MK: 2-5.). Ekkor az x0 középső alapponthoz tartozó 0y simított értéket a következő lineáris kombinációval állíthatjuk elő:

Page 102: Computational Chemistry

Tasi Gyula: Számítógépes kémia

102

0ˆ ,m

i ii m

y N c y

ahol N a normálási tényező. Különböző m és n esetén táblázatokban foglalták össze a {ci} együtthatókat és az N normálási tényezőket. Általában az 5-pontos köbös formulát használják a gyakorlatban, így a többi esettel nem foglalkozunk:

3 23 3 2 1 0 ,p x a x a x a x a

ahol

0 2 1 0 1 23 12 17 12 3 / 35;a y y y y y

1 2 1 1 28 8 / 12 ;a y y y y h

22 2 1 0 1 22 2 2 / 14 ;a y y y y y h

33 2 1 1 22 2 / 12 .a y y y y h

Mivel az x = x0 = 0 helyen p3(x0) = a0, ezért az a0 kifejezése éppen a keresett köbös simító formulát szolgáltatja. Gyakran a formulát ismételten alkalmazzuk, hogy minél simább adatsort állítsunk elő. Ez nagymértékben javítja a numerikus derivált jóságát.

Az előbbi harmadfokú polinom deriváltja:

23 3 2 13 2 .p x a x a x a

Ennek alapján az x = x0 = 0 helyen 3 0 1( )p x a , így a1 az x0 helyen a derivált becslése. Meg kell azonban jegyezni, hogy a numerikus deriválás (különösen rövid adatsorok esetén) rend-kívül bizonytalan művelet. Hosszú adatsoroknál a simított deriváltak azonban alkalmasak szélsőértékhelyek és inflexiós pontok meghatározására. Ezek után elkészíthetjük a simító-deriváló FORTRAN szubrutinunkat (smooth.f):

************************************************************************ subroutine smooth(n,y,s,d) ************************************************************************ * Subroutine SMOOTH performs 5-point cubic smoothing. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit none double precision s(*),d(*),y(*) integer*4 n,i c c Simitas c s(1)=(207.d0*y(1)+12.d0*y(2)-18.d0*y(3)+12.d0*y(4)-3.d0*y(5))/ & 210.d0 s(2)=(2.d0*y(1)+27.d0*y(2)+12.d0*y(3)-8.d0*y(4)+2.d0*y(5))/35.d0 do i=3,n-2 s(i)=(-3.d0*y(i-2)+12.d0*y(i-1)+17.d0*y(i)+12.d0*y(i+1)- & 3.d0*y(i+2))/35.d0 end do s(n-1)=(2.d0*y(n)+27.d0*y(n-1)+12.d0*y(n-2)-8.d0*y(n-3)+ & 2.d0*y(n-4))/35.d0 s(n)=(207.d0*y(n)+12.d0*y(n-1)-18.d0*y(n-2)+12.d0*y(n-3)-

Page 103: Computational Chemistry

Tasi Gyula: Számítógépes kémia

103

& 3.d0*y(n-4))/210.d0 c c Derivalas c d(1)=(-125.d0*y(1)+136.d0*y(2)+48.d0*y(3)-88.d0*y(4)+29.d0*y(5))/ & 84.d0 d(2)=(-57.d0*y(1)-3.d0*y(2)+36.d0*y(3)+39.d0*y(4)-15.d0*y(5))/ & 126.d0 do i=3,n-2 d(i)=(y(i-2)-8.d0*y(i-1)+8.d0*y(i+1)-y(i+2))/12.d0 end do d(n-1)=(57.d0*y(n)+3.d0*y(n-1)-36.d0*y(n-2)-39.d0*y(n-3)+ & 15.d0*y(n-4))/126.d0 d(n)=(125.d0*y(n)-136.d0*y(n-1)-48.d0*y(n-2)+88.d0*y(n-3)- & 29.d0*y(n-4))/84.d0 return end

A forráskódból látható, hogy a formulákat az első kettő és az utolsó kettő pontra is kiterjesz-tettük.

Az előző projektben foszforsavat titráltunk NaOH-val. A pH vs. VB ekvidisztáns adatokat ASCII fájlba írtuk, s így kaptunk egy (zajtalan) jelsorozatot. Használjuk az előző simító-deri-váló szubrutinunkat, s jelenítsük meg a kapott első numerikus deriváltakat. Természetesen itt a simításnak (szerencsére) nincs látható eredménye, mivel az adatsorunk hibamentes.

0 5 10 15 20 25 30 35 400.00

0.05

0.10

0.15

0.20

0.25

0.30

0.35

dpH

/dV

B(c

m-3)

VB/cm3

Az ábrán gyönyörűen láthatók az első derivált szélsőértékhelyei, azaz az eredeti titrálási görbénk ekvivalencia (inflexiós) pontjai.

Természetesen az előbbi hibamentes adatsorozatunkhoz mesterségesen (számítógéppel) is adhatunk hozzá zajt. Ehhez csak egy jó véletlenszám-generátorral kell rendelkeznünk. A rand() FORTRAN könyvtári függvény a [0,1) intervallumban, egyenletes eloszlásban szol-gáltat véletlen duplapontos valós számokat. A centrális határeloszlás tétele (MK: 2-4.) lehe-tőséget nyújt számunkra, hogy a rand() függvény segítségével egy egyszerű szubrutint készítsünk közelítőleg normális eloszlású véletlenszámok előállítására.

A tételt először a standard binomiális eloszlású nQ változóra mondták ki (MK: 2-4.):

lim ,nnP a Q b P a Z b

Page 104: Computational Chemistry

Tasi Gyula: Számítógépes kémia

104

azaz a nQ változó eloszlása határértékben a standard normális eloszláshoz tart. A tétel azon-ban általánosan is érvényes: nem fontos, hogy nQ binomiális eloszlású legyen. Elegendő, ha az nS előállításában szereplő iX változók függetlenek és azonos eloszlásúak ( )iE X vár-ható értékkel és 2 2( )iD X varianciával:

1 2 .n nS X X X

Ekkor a standardizált

nn

S nQ

n

változóra fennáll a centrális határeloszlás tétele. Legyenek most az iX változók függetlenek és a [0,1) intervallumon egyenletes eloszlásúak (MK: 2-4.). Ekkor

1 2

1;

2nE X E X E X

2 2 21 2

1.

12nD X D X D X

;2n

nE S

2 .12n

nD S

Ha n = 12, akkor

12 6;E S

212 1.D S

Ekkor a centrális határeloszlás tételének megfelelően a

12 1212 122

12

6S E S

Q SD S

valószínűségi változó elég jó közelítéssel standard normális eloszlású. Öntsük egy függvény-be a most bemutatott eljárást:

************************************************************************ double precision function gerr(mu,sigma) ************************************************************************ * Subroutine GERR generates random numbers with approximate normal * * distribution based on the central limit theorem. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit none c c sigma: standard deviation c mu: expectation value c double precision mu,sigma,sum,rand integer i sum=0.d0 do i=1,12

Page 105: Computational Chemistry

Tasi Gyula: Számítógépes kémia

105

sum=sum+rand() end do sum=(sum-6.d0)*sigma+mu gerr=sum return end

Ellenőrizzük az eljárás jóságát! Határozzuk meg Monte-Carlo-módszerrel a következő integrál értékét:

2

2

1exp .

22

xP x dx

Kiválasztunk néhány értéket, és megnézzük, hogy mennyire pontosan tudjuk az integrál értékét reprodukálni: = , P = 0.68; = 1.96, P = 0.95; = 3, P = 0.997. Készítsünk egy kis főprogramot. Először meg kell adnunk egy n természetes számot. Ennyi normális eloszlású véletlenszámot fogunk generálni. A generált számok közül nyilvántartjuk azok számát, amik a kérdéses intervallumba esnek: m. Az integrál közelítő értékének meghatá-rozására a következő formulát alkalmazzuk:

.m

P xn

Minél nagyobb n értéke, annál jobb lesz a közelítésünk. Az előző hibamentes titrálási adatsorozatunkhoz adjunk hozzá közelítőleg normális

eloszlású hibát! Ennek érdekében a smooth szubrutin meghívása előtt az adatsorozat minden pontjánál meghívjuk a gerr függvényt. Csak a mu és a sigma változók értékét kell az előzőekben megadnunk.

call srand(iseed) do i=1,n y(i)=y(i)+gerr(mu,sigma) end do call smooth(n,y,s,d)

Az srand(iseed) könyvtári szubrutin lehetőséget ad az első véletlenszám értékének a megadására. Erre akkor van szükség, ha nem szeretnék minden alkalommal ugyanazt a véletlenszám-sorozatot használni. Egyszerűen az iseed egész típusú változónak kell más értéket adnunk. Legyen mu = 0.d0 és sigma = 0.01d0. Jelenítsük meg az előzetes simítás nélkül kapott első numerikus deriváltakat:

Page 106: Computational Chemistry

Tasi Gyula: Számítógépes kémia

106

0 5 10 15 20 25 30 35 40

-0.05

0.00

0.05

0.10

0.15

0.20

0.25

0.30

0.35

0.40

dp

H/d

VB(c

m-3)

VB/cm3

Látható. hogy ez a grafikon minőségét tekintve jelentősen különbözik az előzőtől, bár még megállapíthatók az inflexiós pontok helyei. A következő ábrán megmutatjuk, hogy a harma-dik simítás után az első numerikus deriváltak már kevésbé érzékenyek a hibára:

0 5 10 15 20 25 30 35 40-0.05

0.00

0.05

0.10

0.15

0.20

0.25

0.30

0.35

3. simítás

dpH

/dV

B(c

m-3)

VB/cm3

Meghatározott hibával terhelt adatok generálása rendkívül fontos a lineáris és a nemline-

áris regresszió különböző módszereinek a tesztelése szempontjából. Ennek megfelelően a gerr szubrutint gyakran fogjuk használni a továbbiakban is. Ez a fajta hibagenerálás egyfaj-ta Monte-Carlo módszernek tekinthető. Általában rendkívül nehéz előállítani olyan valós kísérleti adatokat, amelyek a kívánt eloszlású véletlen hibával rendelkeznek. Egy későbbi projektben részletesebben foglalkozunk véletlen számokkal és egyéb Monte-Carlo számítá-sokkal.

Szárítás alatt szilárd anyagok nedvességtartalmának csökkentését vagy teljes eltávolítását értjük. A szárítás lényegében hőközléssel egybekötött anyagátadási művelet: az anyag-transzport a nedves száradó anyagban, annak felületén és a szilárd anyagot körülvevő fluidumban, ami rendszerint levegő, játszódik le. Az anyagunk csak akkor képes száradni, ha a nedvesség a környező fluidumba be tud lépni. A következő ábra egy alumíniumoxid adszor-bens víztartalmát mutatja az idő függvényében. A 100 Celsius-fokon szárított minta tömegét

Page 107: Computational Chemistry

Tasi Gyula: Számítógépes kémia

107

2 percenként regisztráltuk. Sajnos, in situ nem tudtuk megvalósítani a tömegmérést, és sűrűbb mintavételezésre sem volt lehetőségünk. Ennek megfelelően az adatokat jelentős hiba terheli.

0 10 20 30 40 50 60 70 80 90 1000

2

4

6

8

10

12

14

16

18

ns (

mol

/kg

)

t/min A szárítási folyamat sebességgörbéjét az előbbi szárítási görbe numerikus deriválásával kap-hatjuk meg. Nézzük meg, hogy hogyan néz ez ki előzetes simítás nélkül! Alkalmazzuk a smooth szubrutinunkat!

0 10 20 30 40 50 60 70 80 90 100-0.6

-0.5

-0.4

-0.3

-0.2

-0.1

dn

s/dt (

mo

l/kg

/min

)

t/min Első ránézésre nem tűnik túl biztatónak a helyzet. Alkalmazzunk többszörös simítást: hátha szebb lesz a sebességgörbénk! A 3. simítás után a szárítási görbe:

0 10 20 30 40 50 60 70 80 90 1000

2

4

6

8

10

12

14

16

18

ns (

mol

/kg

)

t/min és a sebességgörbe:

Page 108: Computational Chemistry

Tasi Gyula: Számítógépes kémia

108

0 10 20 30 40 50 60 70 80 90 100-0.7

-0.6

-0.5

-0.4

-0.3

-0.2

-0.1

dn s/d

t (m

ol/k

g/m

in)

t/min Ez már sokkal barátságosabbnak tűnik.

Page 109: Computational Chemistry

Tasi Gyula: Számítógépes kémia

109

10. A “pontok a gömbön” probléma megoldása minimalizálással A “pontok a gömbön”-modell (POS, Eng. Points on a Sphere) fontos szerepet játszik

számos kémiai alkalmazásban. A kérdéses modell esetén a feladat egyenletes eloszlásban pontokat generálni egy egységnyi sugarú gömb felületén. A problémát megoldhatjuk egy megfelelően választott függvény minimalizálásának a segítségével. Tekintsük ugyanis a pon-tokat egységnyi pozitív (negatív) töltéssel rendelkező részecskéknek, s minimalizáljuk a töltésrendszer COULOMB-féle taszításból származó potenciális energiáját. Egy térbeli polár-koordináta-rendszert (MK: F.1-3.) felvéve, az egységnyi sugarú gömbön minden pont helyzetét 2 paraméterrel tudjuk megadni ( és szögek). A függvény, amit minimalizálnunk kell az egyenletes eloszlású ponthalmaz létrehozása érdekében, a töltésrendszer potenciális energiája:

1

1 1

1,

n n

i j i ij

Vr

ahol n a pontok száma és rij az i és a j pontok közötti távolság. Látható, hogy a függvényünk 2n-változós. Írjunk egy FORTRAN függvényt a V számítására:

************************************************************************ function fn(p) ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) c nmax: a pontok maximalis szama c np: a pontok aktualis szama, 2*np a parameterek szama c s(): a tavolsag-matrix parameter (nmax=1000) common/adatok/np,s(nmax,nmax) dimension p(2*nmax),angle(2,nmax) k=0 do i=1,np do j=1,2 k=k+1 angle(j,i)=p(k) end do end do do i=1,np s(i,i)=0.d0 end do do i=1,np-1 do j=i+1,np xi=dsin(angle(1,i))*dcos(angle(2,i)) yi=dsin(angle(1,i))*dsin(angle(2,i)) zi=dcos(angle(1,i)) xj=dsin(angle(1,j))*dcos(angle(2,j)) yj=dsin(angle(1,j))*dsin(angle(2,j)) zj=dcos(angle(1,j)) x=xi-xj y=yi-yj z=zi-zj c c r: az i-ik es a j-ik pont tavolsaga c r=dsqrt(x**2+y**2+z**2) s(i,j)=r

Page 110: Computational Chemistry

Tasi Gyula: Számítógépes kémia

110

s(j,i)=s(i,j) end do end do c c fn: a potencialis energia c fn=0.d0 do i=1,np-1 do j=i+1,np fn=fn+1.d0/s(i,j) end do end do return end

A ponthalmaz számunkra szükséges konfigurációjának meghatározásához ezt a függvényt kell minimalizálnunk. A minimumban az azonos töltéssel rendelkező részecskék a lehető leg-távolabb fognak egymástól elhelyezkedni. Természetesen előfordulhat, hogy adott részecs-keszám esetén több lokális minimum is van. Hogy ebben az esetben melyik optimális konfi-gurációt kapjuk többek között attól is függ, hogy milyen kiindulási konfigurációt veszünk fel.

Többváltozós függvények minimumának meghatározására szolgáló szimplex-eljárást (Eng. simplex method) NELDER és MEAD publikálta 1965-ben [J.A. Nelder, R. Mead, A simplex method for function minimization, Computer Journal, 7, 308 (1965)]. Az eljárás kis trükkök révén azonban nemcsak lokális minimumok, hanem lokális maximumok, sőt nyereg-pontok meghatározására is alkalmas. Mivel csak függvényértékekre van szüksége a mód-szernek, a legbonyolultabb függvények sem jelentek problémát. Egyedüli követelmény a függvénnyel szemben az, hogy folytonosnak kell lennie (MK: F.2-3.).

Szimplexnek nevezzük az n-dimenziós térben az (n+1) pontból – mint csúcspontból – álló szabályos geometriai objektumot.

Ennek megfelelően a 2-dimenziós térben a szimplex egy szabályos (egyenlőoldalú) három-szög, a 3-dimenziósban pedig egy tetraéder. Az eljárás során a kezdetben szabályos szimplex fokozatosan torzul: alkalmazkodik a függvény lokális topológiájához. Ha indokolt, már a kezdeti szimplexünket is úgy vehetjük fel, hogy az eltérhet a szabályostól. Általában azonban feltesszük, hogy a szimplexünk nem degenerált. Ez alatt azt értjük, hogy ha a szimplex egyik pontját origónak választjuk, akkor a többi n pont által meghatározott vektorrendszer kifeszíti az n-dimenziós teret.

Mutassuk be az eljárást a legegyszerűbb esetben, azaz amikor a függvényünk kétváltozós: ( ) ( , ),f f x yP ahol ( , )x y a P pont koordinátái a 2-dimenziós derékszögű koordináta-rend-

szerben. Az eljárás első lépése a kiindulási szimplex generálása egy általunk kiválasztott 0P pont

körül:

0 ( 1, 2),i i i P P e

ahol az ie vektorok a 2-dimenziós tér egységvektorai (MK: F.1-3.) és egy általunk megadott skalár. Temészetesen egymástól eltérő -ákat is használhatunk az iránytól függően.

Page 111: Computational Chemistry

Tasi Gyula: Számítógépes kémia

111

A kiindulási szimplex generálása után a szimplexet lépésenként mozgatjuk a függvény (vala-melyik) lokális minimuma felé:

Egymás utáni lépésekkel a szimplex “legrosszabb” pontját, azaz azt ahol a függvény értéke a legnagyobb, egy meghatározott irányban mozgatjuk annak érdekében, hogy egy jobb pontot találjunk. Tekintsük a fenti ábránkat. Tegyük fel, hogy 0 1 2( ) ( ), ( ),f f fP P P azaz 0P a leg-

rosszabb pontunk. Legyen a C pont a 1P és a 2P pontok középpontja. Ezen a ponton keresz-

tül tükrözzük (Eng. reflection) a 0P pontot: az R pontot kapjuk.

Ha az R pontba való lépés nem sikeres, azaz 1 2( ) ( ), ( ),f f fR P P akkor zsugorítást (kontrakció, Eng. contraction) hajtunk végre a K, vagy a K pontba attól függően, hogy az

( ),f R vagy az 0( )f P a kisebb. A kontrakció vérehajtása után előadódhat az – az egyébként ritka – helyzet, hogy 0( ) ( )f f K P vagy ( ) ( ).f fK R Ebben az esetben a szimplexet a 1P vagy a 2P pont körül zsugorítjuk attól függően, hogy 1( )f P és 2( )f P közül melyik a kisebb.

Ha az R pontba való lépés sikeres, azaz 1 2( ) ( ), ( ),f f fR P P akkor az E pontba nyújtjuk a lépésünket (Eng. expansion). Az R és az E pontok közül a jobbikat tartjuk meg, azaz azt, amelyikben kisebb a függvény értéke. Ha sem zsugorításra, sem nyújtásra nem kerül sor, akkor a 0P pontot az R ponttal helyettesítjük.

A tükrözés, a nyújtás és a zsugorítás faktorait NELDER és MEAD következőképpen válasz-totta meg: 1, 2 és 0.5. Az eljárás terminálását többféleképpen hajthatjuk végre. Számíthatjuk pl. a szimplex pontjaiban vett függvényértékeknek az átlag körüli szórását:

Page 112: Computational Chemistry

Tasi Gyula: Számítógépes kémia

112

2

1

1

( ) ( ) 1

,1

n

i ii i

f f n

n

P P

és ellenőrizhetjük, hogy ez kisebb-e, mint egy előre megadott érték. Ha kisebb, akkor termi-náljuk az eljárást. Egy másik lehetőség, hogy a szimplex pontjaihoz tartozó függvényértékek-nek a szimplex középpontjában ( ,cP Eng. centroid) felvett függvényérték körüli szórását figyeljük:

1

2

1

( ) ( ),

1

n

i ci

f f

n

P P

ahol

1

1 .1

n

ii

c n

PP

Kétes esetekben, vagy ellenőrzés végett, érdemes az egész procedúrát újraindítani az eljárás végén kapott pontból. Előfordulhat ugyanis, hogy a kapott pont nem lokális minimum, azaz az eljárás abnormálisan fejeződött be.

Ha az újraindítás ugyanazt a pontot eredményezi, akkor nagy valószínűséggel lokális mini-mumot kaptunk.

Készítsünk egy FORTRAN nyelvű szubrutint a szimplex-eljárás megvalósítására! Az Applied Statistics folyóirat 1971-ben közölt egy FORTRAN rutint: O’Neill, R., Algorithm AS 47. Function minimization using a simplex procedure, Appl. Statist., 20, 338 (1971). A későbbiekben többen módosították ezt a rutint: Chambers, J.M., Ertel, J.E., Remark AS R11. A Remark on Algorithm AS 47, Appl. Statist., 23, 250 (1974); Benyon, P.R., Remark AS R15. A Remark on Algorithm AS 47, Appl. Statist., 25, 97 (1976) és Hill, I.D., Remark AS R28. A Remark on Algorithm AS 47, Appl. Statist.; 27, 380 (1978). Sajnos, a kérdéses rutin egyál-talán nem felel meg azoknak az elveknek, amiket a struktúrált programozásról mondtunk: tele van cimkékkel és GOTO utasításokkal, továbbá nem tartalmaz bekezdéseket. Végül is a szubrutin kezdők számára nehezen tekinthető át, ezért itt bemutatunk egy megfelelő, kibő-vített FORTRAN 77 nyelven írt változatot:

************************************************************************ subroutine smplx(maxpar,itmax,ndim,iter,fopt,ftol,nfeval,par) ************************************************************************ c A FORTRAN subroutine to minimize a function with several variables c via the SIMPLEX procedure. c (C) G. Tasi c Department of Applied and Environmental Chemistry c University of Szeged c Rerrich B. ter 1. c H-6720 Szeged, Hungary c c References: c J.A. Nelder, R. Mead: Computer J., 7, 308 (1965); c

Page 113: Computational Chemistry

Tasi Gyula: Számítógépes kémia

113

implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter (alpha=1.d0,beta=0.5d0,gamma=2.d0) dimension par(maxpar),p(maxpar+1,maxpar),y(maxpar+1),pr(maxpar) dimension prr(maxpar),pbar(maxpar),st(maxpar) data del/0.01d0/ c *** c par(): on input it contains the first point of the initial simplex; c on output it contains the coordinates of the best point; c fopt: on output it contains the function value at the best point; c iter: on output it contains the number of steps performed; c nfeval: number of function evaluations performed; c maxpar: maximum dimension of the problem (function); c ndim: actual dimension of the problem; c itmax: maximum number of steps allowed; c alpha: factor of reflection; c beta: factor of contraction; c gamma: factor of expansion; c ftol: tolerance for terminating the procedure; c del: factor for generating the step vector; c npts: number of the vertices of the actual simplex. c *** nfeval=0 npts=ndim+1 do i=1,ndim st(i)=del*par(i) end do c *** c generation of the initial simplex c *** do j=1,ndim do i=1,npts p(i,j)=par(j) end do p(j+1,j)=par(j)+st(j) end do do j=1,npts do i=1,ndim pr(i)=p(j,i) end do y(j)=fn(pr) end do nfeval=nfeval+npts iter=0 c *** c let's start the procedure c *** 1 ibest=1 if(y(1).gt.y(2)) then ibad=1 ibad2=2 else ibad=2 ibad2=1 endif c *** c indeces of the points of the simplex c ibest: the best point c ibad: the worst point

Page 114: Computational Chemistry

Tasi Gyula: Számítógépes kémia

114

c ibad2: the 2nd worst point c *** do i=1,npts if(y(i).lt.y(ibest)) ibest=i if(y(i).gt.y(ibad)) then ibad2=ibad ibad=i elseif((y(i).gt.y(ibad2)).and.(i.ne.ibad)) then ibad2=i endif end do c *** c calculation of the centroid of the simplex c *** do j=1,ndim tmp=0.d0 do i=1,npts tmp=tmp+p(i,j) end do par(j)=tmp/npts end do c *** c yc: the function value at the centroid of the simplex c *** yc=fn(par) nfeval=nfeval+1 dvar=0.d0 do i=1,npts tmp=y(i)-yc dvar=dvar+tmp*tmp end do c *** c dvar: standard deviation of the function values at the vertices of c the simplex around the function value calculated at the centroid c *** dvar=dsqrt(dvar/npts) write(*,'(5x,a,i5,2(2x,f20.12))') & 'Iteration #',iter,y(ibest),dvar if(dvar.le.ftol) then c *** c termination of the procedure c *** fopt=y(ibest) do j=1,ndim par(j)=p(ibest,j) end do return endif if(iter.eq.itmax) then write(*,'(10x,a)') & 'Too many iterations in the simplex routine.' stop endif iter=iter+1 do j=1,ndim pbar(j)=0.d0 end do do i=1,npts if(i.ne.ibad) then

Page 115: Computational Chemistry

Tasi Gyula: Számítógépes kémia

115

do j=1,ndim pbar(j)=pbar(j)+p(i,j) end do endif end do c *** c reflection of the simplex c *** do j=1,ndim pbar(j)=pbar(j)/ndim pr(j)=(1.d0+alpha)*pbar(j)-alpha*p(ibad,j) end do ypr=fn(pr) nfeval=nfeval+1 if(ypr.le.y(ibest)) then c *** c expansion of the simplex c *** do j=1,ndim prr(j)=gamma*pr(j)+(1.d0-gamma)*pbar(j) end do yprr=fn(prr) nfeval=nfeval+1 if(yprr.lt.y(ibest)) then do j=1,ndim p(ibad,j)=prr(j) end do y(ibad)=yprr write(*,'(10x,a)') 'expansion' else do j=1,ndim p(ibad,j)=pr(j) end do y(ibad)=ypr write(*,'(10x,a)') 'reflection' endif elseif(ypr.ge.y(ibad2)) then if(ypr.lt.y(ibad)) then do j=1,ndim p(ibad,j)=pr(j) end do y(ibad)=ypr endif c *** c contraction of the simplex c *** do j=1,ndim prr(j)=beta*p(ibad,j)+(1.d0-beta)*pbar(j) end do yprr=fn(prr) nfeval=nfeval+1 if(yprr.lt.y(ibad)) then do j=1,ndim p(ibad,j)=prr(j) end do y(ibad)=yprr write(*,'(10x,a)') 'contraction' else do i=1,npts

Page 116: Computational Chemistry

Tasi Gyula: Számítógépes kémia

116

if(i.ne.ibest) then c *** c contraction of the simplex around its best point c *** do j=1,ndim pr(j)=0.5d0*(p(i,j)+p(ibest,j)) p(i,j)=pr(j) end do y(i)=fn(pr) nfeval=nfeval+1 write(*,'(10x,a)') 'contraction' endif end do endif else do j=1,ndim p(ibad,j)=pr(j) end do y(ibad)=ypr write(*,'(10x,a)') 'reflection' endif goto 1 end

Látható, hogy a rutinunk csak egy cimkét és egy GOTO utasítást tartalmaz, és az algoritmus egyes lépései jól elkülönülnek egymástól. Ez azt jelenti, hogy a rutinunk megfelel a struktú-rált programozás szabályainak. Alaposan átnézve a forráskódot észrevehetjük, hogy a program futás közben minden iterációban pontosan kiírja, hogy milyen lépés történt: például write(*,'(10x,a)') 'reflection'. Ha erre nincs szükségünk, akkor az első oszlopba írt “c” betűvel kiiktathatjuk ezeket az utasításokat. Mentsük el a szimplex rutinunkat smplx.f néven a háttértárolónkon.

A szimplex rutinunk nemcsak lokális minimumok, hanem lokális maximumok, sőt nye-regpontok meghatározására is alkalmazható. Nézzük meg, hogyan érhetjük ezt el! Ha lokális maximumot keresünk, akkor egyszerűen a függvényünk (1)-szeresét kell vennünk. Továbbá, ha az eredeti n-változós skalárfüggvény helyett a következő n-változós skalárfüggvényt használjuk a szimplex rutinban:

2 2

1

,n

ii

f f f g

akkor elvileg az eredeti függvényünk összes kritikus pontját meghatározhatjuk. Mivel 0, és a stacionárius pontokban a gradiensvektor eltűnik, az eredeti függvényünk minden kritikus pontjának a függvény egy-egy lokális minimuma fog megfelelni. Ezt a trükköt a kvantum-kémiában MCIVER és KOMORNICKI alkalmazta először kémiai reakciók átmeneti állapotának a meghatározására (-módszer, Eng. method) [J.W. McIver, A. Komornicki, Structure of Transition States in Organic Reactions. General Theory and an Application to the Cyclobutene-Butadiene Isomerization Using a Semiempirical Molecular Orbital Method, Journal of American Chemical Society, 94, 2625 (1972)]. Sajnos, a -módszer csak akkor használható hatékonyan, ha a kiindulási pontunk igen közel helyezkedik el a stacionárius ponthoz.

Page 117: Computational Chemistry

Tasi Gyula: Számítógépes kémia

117

A szimplex-eljárást – megfelelő trükkök révén mellékfeltétel melletti szélsőérték meg-határozására (Eng. constrained optimization) is alkalmazhatjuk. Itt csak egyetlenegy esetet tekintünk. Tegyük fel, hogy a mellékfeltételeink olyanok, hogy minden független változó csak nemnegatív lehet. Ebben az esetben például úgy járhatunk el, hogy az eredeti független változóink helyett azok négyzetgyökét vezetjük be új független változókként, és a függvény-értékek számításakor négyzetre emeljük őket. Ezzel az egyszerű trükkel a kívánt tartományra tudjuk korlátozni a minimumkeresést.

Az alábbiakban meghatározzuk a következő kétváltozós függvény összes stacionárius pontját [E.K.P. Chong, S.H. Zak: An Introduction to Optimization, Wiley, New York (1996)]:

2 22 3 4 2 2

2 2

( , ) 3 1 exp 1 10 exp2

exp 1.

3

xf x y x x y x y x y

x y

A kérdéses függvény geometriailag egy felületnek felel meg a 3-dimenziós térben (MK: 2-7.). A függvénynek három maximuma (M1-M3), két minimuma (m1, m2) és három elsőfajú nyeregpontja (s1-s3) van. Az ún. kontúrvonalas (szintvonalas, nívóvonalas) ábrán a kritikus pontok jól felismerhetők:

Mielőtt megírnánk a szimplex-eljáráshoz szükséges fn() függvényt, oldjuk meg a prob-lémát a MATHEMATICA program segítségével is:

Page 118: Computational Chemistry

Tasi Gyula: Számítógépes kémia

118

Page 119: Computational Chemistry

Tasi Gyula: Számítógépes kémia

119

A MATHEMATICA programmal tehát a következő stacionárius pontokat kapjuk:

Kritikus pontok x y f(x,y)

m1 0.404936 0.166523 -0.930778 m2 -1.431359 0.206945 -2.467838 M1 -0.365185 -1.263316 9.276397 M2 -0.059952 1.409113 5.425638 M3 1.370701 -0.008093 2.909429 s1 -0.364835 0.455781 1.665537 s2 1.148303 0.868567 1.897576 s3 1.154115 -0.890394 1.915013

A stacionárius pontok meghatározásához használt kiindulási közelítő értékeket a fentiekben bemutatott szintvonalas ábráról olvastuk le. A MATHEMATICA program segítségével

Page 120: Computational Chemistry

Tasi Gyula: Számítógépes kémia

120

könnyen meghatározhatjuk a függvény parciális deriváltjait is. Ezeket a formulákat pedig fel tudjuk használni a függvény gradiensvektororát és a HESSE-mátrixát számító FORTRAN nyelvű rutinok megírásához. Készítsük el a főprogramot, valamint a függvényt, a gradiens-vektort és a gradiensvektor normáját számító rutinokat! A fájl neve legyen chong.f.

c*********************************************************************** program main c*********************************************************************** implicit real*8(a-h,o-z) implicit integer(i-n) dimension par(20) ndim=2 ftol=1.0d-12 write(*,*) 'Enter starting point: ' read(*,*) (par(i),i=1,ndim) write(*,*) 'Initial values of the parameters:' write(*,'(f12.6)') (par(i),i=1,ndim) write(*,'(a,f15.8)') 'Initial function value: ',fn(par) call smplx(par,ndim,iter,fopt,ftol,nfeval) write(*,*) 'Optimized values of the parameters:' write(*,'(f18.6)') (par(i),i=1,ndim) write(*,'(a,f15.8)') 'Optimal value: ',fn(par) write(*,'(a,d10.3)') 'Tolerance: ',ftol write(*,'(a,i10)') 'Number of function evaluations: ',nfeval end c*********************************************************************** function fn(p) c*********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) dimension p(20),g(20) x=p(1) y=p(2) fn=3.d0*(1.d0-x)**2*dexp(-x**2-(y+1.d0)**2) 1 -10.d0*(0.5d0*x-x**3-y**4)*dexp(-x**2-y**2) 2 -(dexp(-(x+1.d0)**2-y**2))/3.d0 return end c*********************************************************************** subroutine gradfn(p,g) c*********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) dimension p(20),g(20) x=p(1) y=p(2) g(1)=-6.d0*(1.d0-x)*dexp(-x**2-(y+1.d0)**2) 1 -6.d0*x*((1.d0-x)**2)*dexp(-x**2-(y+1.d0)**2) 2 -10.d0*(0.5d0-3.d0*(x**2))*dexp(-x**2-y**2)+ 3 20.d0*x*(x*0.5d0-x**3-y**4)*dexp(-x**2-y**2)+ 4 (2.d0*(x+1.d0)*dexp(-(x+1.d0)**2-y**2))/3.0d0 g(2)=-6.d0*(y+1.d0)*(1.d0-x)**2*dexp(-x**2-(y+1.d0)**2) 1 +40.d0*y**3*dexp(-x**2-y**2) 2 +20.d0*y*(0.5d0*x-x**3-y**4)*dexp(-x**2-y**2) 3 +2.d0*y/3.0d0*dexp(-(x+1.d0)**2-y**2) return end

Page 121: Computational Chemistry

Tasi Gyula: Számítógépes kémia

121

c*********************************************************************** function gnorm(p) c*********************************************************************** implicit real*8(a-h,o-z) implicit integer*4(i-n) dimension p(20),g(20) call gradfn(p,g) sum=0.d0 do i=1,2 sum=sum+g(i)*g(i) end do gnorm=dsqrt(sum) return end

A chong.exe programmal határozzuk meg az adott függvény összes stacionárius pontját! A kapott eredmények pontosan megegyeznek azokkal, amiket a MATHEMATICA program révén kaptunk.

A szimplex-eljárással és módosításával számtalan cikk és könyv foglalkozik. Az alábbi munka jó kiindulási pontot jelent: F.H. Walters, S.L. Morgan, L.R. Parker, S.N. Deming, Sequential Simplex Optimization, CRC Press, Boca Raton, 1991.

Említettük már, hogy a szimplex-módszer közvetlen kereső eljárás, csak függvényérté-keket használ. Ha a paramétereink száma nagyobb, mint 20, akkor érdemes más módszer után nézni. Ekkor lépnek színre az ún. NEWTON- és kvázi-NEWTON-módszerek. Ezeknél a mód-szereknél a függvény gradiensvektorára és/vagy a HESSE-mátrixára is szükségünk van. Néz-zük most meg, hogy az egyszerű NEWTON-módszer milyen lépéseket használ egy n-változós függvény minimalizálásánál! Az : nf függvényünket az xk pont környezetében egy

kvadratikus TAYLOR-polinommal közelítjük (MK: 2-7.):

1,

2

T

k k kf f f Tx x x σ σ H x σ

ahol a nσ virtuális elmozdulásvektor. Tegyük fel, hogy a elmozdulásvektor az xk+1 pontban minimumba visz ( 1k k σ x x ). Ekkor

1 1 .k k k k kf f x x H x x x 0

Egyszerűsítve a jelölésrendszert:

1 ,k k k k g g H p 0

ahol pk az ellépésvektor. A kérdéses egyenletből az ellépésvektorra kapjuk, hogy 1 .k k k p H g

Az ellépésvektor meghatározása érdekében a mátrixinvertálás helyett azonban érdemes a következő lineáris algebrai egyenletrendszert megoldanunk:

.k k k H p g

A lineáris algebrai egyenletrendszer megoldására használhatjuk a GAUSS-féle eliminációs eljárást, vagy az LU-faktorizációs módszert (lásd a 15. projektet). A pk ellépésvektor ismere-tében a minimumhely közelítésére vonatkozó új pontunk már számítható:

Page 122: Computational Chemistry

Tasi Gyula: Számítógépes kémia

122

1 .k k k x x p

Az eljárást akkor termináljuk, ha a gradiensvektor normája egy előre megadott értéknél kisebb.

1 .k gtol g

Fontos megjegyezni, hogy az eljárás egy pozitív definit kvadratikus függvény minimum-helyét egyetlen lépésben megtalálja. Egyéb esetekben ez általában nincs így, s ha messze vagyunk a minimumtól, akkor előfordulhat, hogy az eljárás nem konvergál. Írjon egy szubru-tint a bemutatott egyszerű NEWTON-módszer megvalósítására, s próbálja meghatározni az előbbi függvényünk stacionárius pontjait!

A kvázi-NEWTON-módszerek a H1 mátrixot nem számolják analitikusan, hanem a gradiensvektor segítségével fokozatosan frissítik a kiindulásit, s az ellépésvektor irányában egyváltozós függvény minimalizálásával határozzák meg az új pontot. Ezt az eljárást hívjuk iránymenti keresésnek (Eng. line search). Az utóbbi évtizedek tapasztalatai szerint a legjob-ban bevált kvázi-NEWTON-módszer a BROYDEN-FLETCHER-GOLDFARB-SHANNO-féle (BFGS) eljárás: ezt használják leggyakrabban az optimalizálási eljárásokban.

Térjünk most vissza az eredeti problémánkhoz, a POS-modellhez, s készítsük el a főprogramot, valamint a gradiensvektort (dfn()) és a HESSE-mátrixot (hessian()) számító rutinokat! Az utóbbit egyelőre analitikus gradiensvektorokból numerikusan számít-juk. Ha az olvasó kedvet érez hozzá, készíthet egy analitikus változatot is.

************************************************************************ program main ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) c A FORTRAN program to study the ”points on a sphere” modell. c (C) G. Tasi c Department of Applied and Environmental Chemistry c University of Szeged c Rerrich B. ter 1. c H-6720 Szeged, Hungary c parameter (nmax=1000) common/adatok/ np,s(nmax,nmax) dimension p(3,nmax),angle(2,nmax) data pi/0.d0/ if(pi.eq.0.d0) pi=4.d0*datan(1.d0) write(*,*) ’Enter the number of the points:’ read(*,*) np do i=1,np angle(1,i)=rand()*pi angle(2,i)=2.d0*rand()*pi end do call optim(np,angle) do i=1,np p(1,i)=dsin(angle(1,i))*dcos(angle(2,i)) p(2,i)=dsin(angle(1,i))*dsin(angle(2,i)) p(3,i)=dcos(angle(1,i)) end do open(7,file='point.dat',status='unknown') write(7,'(i4)') np do i=1,np

Page 123: Computational Chemistry

Tasi Gyula: Számítógépes kémia

123

write(7,'(3f16.8)') (p(j,i),j=1,3) end do close(7) end ************************************************************************ subroutine optim(np,angle) ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) logical error parameter (nmax=1000,itmax=1000) dimension angle(2,nmax),p(2*nmax),g(2*nmax) dimension a(2*nmax,2*nmax),b(2*nmax),ind(2*nmax) data ftol,gtol,tiny/1.d-14,1.d-8,1.d-16/ n=2*np k=0 do i=1,np do j=1,2 k=k+1 p(k)=angle(j,i) end do end do call smplx(p,n,iter,fopt,ftol,nfeval) call dfn(p,g,f) gnorm=dsqrt(dot(g,g,n)) call hessian(p,g,a) write(*,*) 0,gnorm,f do iter=1,itmax do i=1,n b(i)=-g(i) end do call lufact(a,n,tiny,error,ind,ip) if(error) stop 'The matrix L is singular!' call lusubs(a,n,ind,b) p=p+b call dfn(p,g,f) gnorm=dsqrt(dot(g,g,n)) call hessian(p,g,a) write(*,*) iter,gnorm,f if(gnorm.lt.gtol) goto 10 end do stop 'No convergence in NEWTON' 10 k=0 do i=1,np do j=1,2 k=k+1 angle(j,i)=p(k) end do end do return end ************************************************************************ subroutine dfn(p,g,f) ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter (nmax=1000) common/adatok/ np,s(nmax,nmax) dimension p(2*nmax),g(2*nmax),pp(2,nmax),gg(2,nmax)

Page 124: Computational Chemistry

Tasi Gyula: Számítógépes kémia

124

k=0 do i=1,np do j=1,2 k=k+1 pp(j,i)=p(k) end do end do do i=1,np gg(1,i)=0.d0 gg(2,i)=0.d0 xi=dsin(pp(1,i))*dcos(pp(2,i)) xi1=dcos(pp(1,i))*dcos(pp(2,i)) xi2=-dsin(pp(1,i))*dsin(pp(2,i)) yi=dsin(pp(1,i))*dsin(pp(2,i)) yi1=dcos(pp(1,i))*dsin(pp(2,i)) yi2=dsin(pp(1,i))*dcos(pp(2,i)) zi=dcos(pp(1,i)) zi1=-dsin(pp(1,i)) do j=1,np if(i.eq.j) cycle xj=dsin(pp(1,j))*dcos(pp(2,j)) yj=dsin(pp(1,j))*dsin(pp(2,j)) zj=dcos(pp(1,j)) x=xi-xj y=yi-yj z=zi-zj r=dsqrt(x**2+y**2+z**2) gg(1,i)=gg(1,i)-(x*xi1+y*yi1+z*zi1)/(r**3) gg(2,i)=gg(2,i)-(x*xi2+y*yi2)/(r**3) end do end do k=0 do i=1,np do j=1,2 k=k+1 g(k)=gg(j,i) end do end do f=fn(p) return end ************************************************************************ subroutine hessian(p,g,a) ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) parameter (nmax=1000) common/adatok/ np,s(nmax,nmax) dimension p(2*nmax),g(2*nmax) dimension a(2*nmax,2*nmax),g1(2*nmax),g2(2*nmax) data del/0.001d0/ do i=1,2*np x0=p(i) p(i)=x0+del p1=x0+del call dfn(p,g1,f1) p(i)=x0-del p2=x0-del call dfn(p,g2,f2)

Page 125: Computational Chemistry

Tasi Gyula: Számítógépes kémia

125

do j=1,i a(i,j)=(g1(j)-g2(j))/(p1-p2) a(j,i)=a(i,j) end do p(i)=x0 end do return end

Látható, hogy a kiindulási pontok felvételére a rand() FORTRAN könyvtári függvényt használjuk. Ez a függvény a [0,1) intervallumban egyenletes eloszlásban szolgáltat véletlen valós számokat (MK: 2-4.). A véletlen számokról és a Monte-Carlo módszerekről a 13. projektben bővebben beszélünk. A NEWTON-módszerhez tartozó lineáris algebrai egyenlet-rendszert itt az LU-faktorizációs módszerrel oldjuk meg. A lufact() és a lusubs() szubrutinok valósítják meg ezt az eljárást. Az atomi töltések számításával foglalkozó 15. projektben a módszer részletes tárgyalásán túl ezek forráskódja is megtalálható. Jelen körülmények között a szimplex-módszer is elegendő, így ha akarjuk a NEWTON-módszert egyelőre teljesen elhagyhatjuk.

Feladatok:

10.1 Határozza meg az alábbi függvény összes stacionárius pontját és állapítsa meg azok típusát!

4( , ) 8 3.f x y y x xy x y

10.2 Határozza meg a 2 2( , )z f x y x y függvény összes stacionárius pontját a következő mellékfeltétel mellett: ( , ) 2 0g x y y x !

10.3 Keresse meg az ún. ROSENBROCK-féle függvény (parabola völgy, banánfüggvény, Eng. parabolic valley, banana function) globális minimumát a szimplex módszer segítségével!

2 2 2( , ) (1 ) 100( ) .f x y x y x

Vegye fel a 1.2,1.0 pontot is kiindulási pontként! Minden esetben jegyezze fel, hogy mennyi lépés után állt meg a program és milyen pontba jutott?

10.4 A POS-modell esetén vizsgálja meg, hogy a rendszer potenciális energiája hogyan függ a részecskék számától! Próbálja a szimplex-módszert jelen esetben globális optimalizálásra is felhasználni! Határozza meg az összes lokális minimumnak megfelelő konfigurációt minden esetben!

*10.5 Állítson elő egyenletesen eloszlásban pontokat (100, 200, …, 1000) az egységnyi suga-rú gömbön! Készítsen ASCII fájlokat az adatokból (pont100.dat, pont200.dat, …, pont1000.dat) úgy, hogy a fájlok első sora a pontok számát, majd a következő sorok az x-, az y- és a z-koordinátákat tartalmazzák pontonként. Milyen kapcsolatot lát a jelen feladat és molekulák VAN DER WAALS felületének a generálása között?

Page 126: Computational Chemistry

Tasi Gyula: Számítógépes kémia

126

11. Görbék illesztése mérési adatokra: lineáris és nemlineáris regresszió A kísérleti adatokat leíró lineáris (linearizált) összefüggések elméletileg fontos paraméte-

reket tartalmazhatnak, melyek értékét a kísérletező – a kísérleti adatok birtokában becsülni szeretné. A kísérleti adatok azonban hibával terheltek, amiket a kiértékelő szeretne kiegyen-líteni, vagy valamilyen értelemben a lehető legjobb egyenes illesztésével eltávolítani. Az egyedüli mennyiségek, amikre szükség van, a legjobb egyenes meredeksége és az ún. y-tengelymetszet, azaz az egyenes paraméterei. Ez az a filozófia, ami a legkisebb négyzetek (LS) módszerének a megszületéséhez vezetett (MK: 2-5.).

A feladat nem tűnik túl bonyolultnak, hiszen szakemberek rutinszerűen hajtanak végre ilyen feladatokat laboratóriumi kísérleti eredmények kiértékelésekor. Hogy a feladat mégsem triviális, azt az is jelzi, hogy a kérdésről komoly szakkönyvek jelentek és jelennek meg. Itt csak egy kitűnő könyvet említünk S.F. ACTON tollából: Analysis of Straight Line Data; John Wiley & Sons: New York (1959). A könyv 267 oldalas és nem tér ki a probléma minden részletére!

A legkisebb négyzetek módszerének legegyszerűbb vátozatát, a klasszikus lineáris legki-sebb négyzetek (OLLS) módszerét Karl Friedrich GAUSS (1777-1855) vezette be. Ebben az esetben feltételezzük, hogy az ( , )i ix y kísérleti adatok esetén az xi értékeket hibamentesen

tudjuk mérni, azaz az összes hibát az yi értékek tartalmazzák:

,i i iy y

ahol iy az xi-hez tartozó pontos (hibamentes) y-érték és i a véletlenszerű hiba. Az xi értékek hibamentessége miatt a független változónk nem valószínűségi változó. A kísérletező fontos feladata a szisztematikus, azaz nem véletlenszerű hibák azonosítása és megszüntetése.

Az OLS-módszer feltételezi, hogy a véletlenszerű mérési hiba normális eloszlású, várható értéke miden pontban zéró (E(i) = 0), a szórása pedig ugyanaz a konstans érték (D(i) = ). Feltételezi továbbá azt is, hogy a mérési hibák egymástól függetlenek, azaz Cov( , ) 0i j

(MK: 2-4.). (Valójában a normális eloszlás megkövetelése nem szükséges feltétele az LS-módszer alkalmazhatóságának, de elméleti szempontból elfogadhatóbbá teszi a módszert.)

Nézzük először azt az egyszerű esetet, amikor az egyenesünk átmegy az origón:

,i iy a x

azaz csak egy paraméterünk (a) van. A (diszkrét) OLLS-módszer szerint a következő ún. cél-függvény – korrekt modell esetén a hibanégyzetösszeg-függvény értékét kell minimalizál-nunk a kérdéses paraméter meghatározása érdekében:

2

1

( ) ,m

i ii

S a y a x

ahol m a mérési pontok száma. Az a paraméter becsült értékére a következő kifejezést kapjuk (MK: 2-5.):

1

2

1

ˆ ;

m

i ii

m

ii

x ya

x

Page 127: Computational Chemistry

Tasi Gyula: Számítógépes kémia

127

Látható, hogy a kifejezésben a véletlenszerű hibával terhelt yi értékek is szerepelnek, azaz a paraméterre kapott érték nem pontos, hanem becsült. Ezt fejezzük ki az a betű fölé rajzolt kalappal. Bizonyítható, hogy a várható értéke a pontos, hibamentes érték. Ilyenkor azt mondjuk, hogy a becslésünk torzítatlan, s az a torzítatlan becslése az a paraméternek. Durván azt mondhatjuk, hogy egy becslés akkor torzítatlan, ha átlagban a korrekt értéket szolgáltatja. Adjuk meg az a paraméter becsült hibáját is (MK: 2-5.):

1 12 2

2

1min

2 2

1 1

ˆˆSE( ) .

1 1

m

i ii

m m

i ii i

y yS

am x m x

Most illesszünk egy kétparaméteres egyenest a mérési eredményekre:

,i iy a x b

azaz két paraméterünk (a és b) van. Az ( , )S a b minimumának szükséges feltételéből meg-kaphatjuk az a és a b paraméterünk becsült értékét (MK: 2-5.):

1

2

1

ˆ ;

m

i ii

m

ii

x X y Ya

x X

ˆ ˆ ,b Y a X

ahol

1 ;

m

ii

xX

m

1 .

m

ii

yY

m

Adjuk meg az a és a b paraméterek becsült hibáját is (MK: 2-5.):

12

2

1

1ˆSE( ) ;r m

ii

a sx X

12

2

1

2

1

ˆSE( ) ,

m

ii

r m

ii

xb s

m x X

ahol rs a reziduális szórás:

1

21 2 min

2 .2r r

Ss s

m

Page 128: Computational Chemistry

Tasi Gyula: Számítógépes kémia

128

A linearitás mértékének a jellemzésére jól használható a lineáris korrelációs koefficiens értéke:

1

1 1

.

m

i ii

XY m m

i ii i

x X y Yr

x X y Y

A lineáris korrelációs együtthatóra fennáll a következő egyenlőtlenség: 1 1;r tökéle-tesen lineáris kapcsolat esetén az értéke 1 (MK: 2-4.).

A kétparaméteres modell esetén egy másik korreláció (kapcsolat) problémája is felmerül: nevezetesen az a és a b paraméterek mennyire függenek egymástól? Az a és a b paramé-terek korrelációs együtthatóját a következő kifejezés definiálja (MK: 2-5.):

ˆˆCov( , )

,ˆˆ

ab

a br

D a D b

ahol jelen esetben

12 2

2

1 1

ˆˆCov , .

m

ii

rm m

i ii i

xa b s

m x x

Ennek a korrelációs koefficiensnek a jelentősége és a szerepe teljesen eltér az előzőétől. Ez a két valószínűségi változó korreláltságát méri. Egyenest akkor is illeszthetünk azonban, ha a két paraméter erősen korrelált, így az egyenes illesztése szempontjából ennek az összefüg-gésnek nincs jelentősége. Az rab számítására akkor van szükség, ha a paramétereket további számításokban kívánjuk felhasználni, s hibaanalízist szándékozunk végezni.

A mért és a számított értékek közötti eltérést maradéknak (reziduum) nevezzük:

ˆ .j j je y y

Az ej mennyiségek nem azonosak az j hibákkal: az ˆ jy -k számítása ugyanis becsült paramé-

terekkel történik. Gyakran felmerül a kérdés, hogy a modellben feltételezett függvény-kapcsolat valóban tekinthető-e lineárisnak. Erre a célra kitűnően megfelel a maradékok

1 2, , , me e e sorozatának a vizsgálata. Ha ábrázoljuk őket, és rendezettséget nem tapasztalunk,

akkor a kapcsolat nagy valószínűséggel lineáris. Készítsünk FORTRAN programokat az OLLS-módszerrel való lineáris regresszió végrehajtására! Az egyparaméteres változat neve legyen olls1.f, míg a kétparaméteresé olls2.f. Az olls1.f fájl listája:

************************************************************************ program main ************************************************************************ * Program OLLS performs linear regression via the OLLS method. * * y = a*x * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary *

Page 129: Computational Chemistry

Tasi Gyula: Számítógépes kémia

129

************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) character title*70 dimension x(50),y(50),yc(50),e(50) read(*,'(a70)') title write(*,'(a70)') title read(*,*) m do i=1,m read(*,*) x(i),y(i) end do sxy=0.d0 sx2=0.d0 sy2=0.d0 sx=0.d0 sy=0.d0 do j=1,m sx=sx+x(j) sy=sy+y(j) sxy=sxy+x(j)*y(j) sx2=sx2+x(j)*x(j) sy2=sy2+y(j)*y(j) end do b=0.d0 a=sxy/sx2 sr2=0.d0 do j=1,m sr2=sr2+(y(j)-a*x(j))**2 end do sr2=sr2/(m-1) sr=dsqrt(sr2) sea=sr/dsqrt(sx2) r=(sxy-sx*sy/m)/dsqrt(sx2-sx*sx/m)/dsqrt(sy2-sy*sy/m) write(*,'(a)') 'Linear regression: y = a*x' write(*,'(a,f10.5,5x,a,f10.5)') 'a= ',a,'+- ',sea write(*,'(3(a,f10.5))') & 'Smin= ',sr2,' sr2= ',sr2,' sr= ',sr write(*,'(a,f10.5)') 'r= ',r do i=1,m yc(i)=a*x(i) e(i)=y(i)-yc(i) end do do i=1,m write(*,'(4f16.8)') x(i),y(i),yc(i),e(i) end do end

Az olls2.f fájl listája:

************************************************************************ program main ************************************************************************ * Program OLLS performs linear regression via the OLLS method. * * y=a*x+b * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************

Page 130: Computational Chemistry

Tasi Gyula: Számítógépes kémia

130

implicit real*8(a-h,o-z) implicit integer*4(i-n) character title*70 dimension x(50),y(50),yc(50),e(50) read(*,'(a70)') title write(*,'(a70)') title read(*,*) m do i=1,m read(*,*) x(i),y(i) end do xav=0.d0 do i=1,m xav=xav+x(i) end do xav=xav/dble(m) sx=0.d0 sy=0.d0 sxy=0.d0 sx2=0.d0 sy2=0.d0 sxav=0.d0 do j=1,m sx=sx+x(j) sy=sy+y(j) sxy=sxy+x(j)*y(j) sx2=sx2+x(j)*x(j) sy2=sy2+y(j)*y(j) sxav=sxav+(x(j)-xav)*(x(j)-xav) end do a=(m*sxy-sx*sy)/(m*sx2-sx*sx) b=(sy*sx2-sx*sxy)/(m*sx2-sx*sx) sr2=0.d0 do j=1,m sr2=sr2+(y(j)-a*x(j)-b)**2 end do sr2=sr2/(m-2) sr=dsqrt(sr2) sea=sr/dsqrt(sxav) seb=sr*dsqrt(sx2/m/sxav) r=(sxy-sx*sy/m)/dsqrt(sx2-sx*sx/m)/dsqrt(sy2-sy*sy/m) covab=-sr2*sx/(m*sx2-sx*sx) rab=covab/sea/seb write(*,'(a)') 'Linear regression: y = a*x +b' write(*,'(a,f10.5,5x,a,f10.5)') 'a= ',a,' +- ',sea write(*,'(a,f10.5,5x,a,f10.5)') 'b= ',b,' +- ',seb write(*,'(3(a,f10.5))') & 'Smin= ',sr2,' sr2= ',sr2/(m-2),' sr= ',sr write(*,'(a,f10.5,5x,a,f10.5)') 'covab= ',covab write(*,'(a,f10.5,5x,a,f10.5)') 'rab= ',rab write(*,'(a,f10.5)') 'r= ',r do i=1,m yc(i)=a*x(i)+b e(i)=y(i)-yc(i) end do do i=1,m write(*,'(4f16.8)') x(i),y(i),yc(i),e(i) end do end

Page 131: Computational Chemistry

Tasi Gyula: Számítógépes kémia

131

Bár a forráskódok magukért beszélnek, azért érdemes az (MK: 2-5.) fejezetet is alaposan áttanulmányozni. Az (MK: 2-5.) fejezetben részletesen elemezzük egy golyósmalommal történő aprítási kísérletsorozat eredményét. A most bemutatott két egyszerű programmal hajtsuk végre, és ellenőrizzük az ott közölt kiértékelés mindenegyes lépését! Vessük össze a kapott számítási eredményeket a közöltekkel! Jelen példa kapcsán arra a konklúzióra juthatunk, hogy a kiugró pontok léte problematikussá teheti az OLLS-módszer alkalmazását.

A MATHEMATICA programmal is végrehajthatjuk a lineáris regressziót a kérdéses adathalmazra. Itt csak a kétparaméteres esetet mutatjuk be:

A helyigény csökentése érdekében az outputsorokat nem mutatjuk be. Hajtsuk végre ezeket az utasításokat a MATHEMATICA program segítségével, s vessük össze a kapott számítási eredményeket a korábbiakkal!

Az OLLS-módszert egyébként azokban az esetekben is alkalmazhatjuk, amikor a függet-len változónk értékét a függő változóéhoz képest kicsi, azaz elhanyagolható hiba terheli.

Page 132: Computational Chemistry

Tasi Gyula: Számítógépes kémia

132

Előfordulhat az az eset is, hogy a független változóval nincs probléma, a függő változónál azonban a hiba mértéke bizonyos értelemben függ a független változótól. Ez utóbbi esetben a súlyozott lineáris legkisebb négyzetek (WLLS) módszerét hívhatjuk segítségül (MK: 2-5.):

2

1

( , ) ( ) ,m

i i ii

S a b w y a x b

ahol a wi súlyfaktor lehetőséget nyújt számunkra az illesztésnél figyelembe vett pontok eltérő mértékű súlyozására. A súlyfaktorok értékét az iy értékek i hibáinak ismeretében például következőképpen tudjuk megválasztani (MK: 2-5.):

2

1 1 1; ; .

ˆi i ii i i i

w w wy y

A lineáris regresszió végrehajtásával kapcsolatban további, súlyos problémák is felmerül-hetnek: (1) mindkét változónk értékét jelentős nagyságú hiba terhelheti és (2) nem tudjuk egyértelműen kiosztani a függő és a független változó szerepét. Ezekben az esetekben az OLLS-módszert már nem szabad használni.

Foglakozzunk most azzal az esettel, amikor mindkét változónk jelentős hibával rendel-kezik (MK: 2-5.)! Ekkor mind a függő, mind a független változót valószínűségi változóként kell kezelni. Hibával terhelt változók esetén a lineáris regresszió végrehajtása nem egyszerű feladat. A szigorú megoldás helyett először egy könnyebben áttekinthető, közelítő megoldást alkalmazunk, ami mellesleg sokszor elegendő pontosságú is [J.A. Irvin, T.I. Quickenden: Linear Least Squares Treatment When There are Errors in Both x and y, J. Chem. Educ., 60, 711 (1983)]. A lineáris regressziót a kétparaméteres egyenessel hajtjuk végre. Jelen esetben a minimalizálandó célfüggvényünk következő formát ölti (lásd később):

22

2 2 21 1

( )( , ) ( ) .

ˆ ˆi i

m mi i

i i ii i y x

y a x bS a b w y a x b

a

Ezt a célfüggvényt kell minimalizálnunk a paraméterek szerint azok meghatározása érdeké-ben. A probléma egzakt megoldása helyett a már említett, közelítő iteratív megoldást alkal-mazzuk. A részletek az (MK: 2-5.) fejezetben megtalálhatók. Az eljárás első lépésében a nevezőben az a-t állandó értéken tartjuk ( 1iw ), s minimalizáljuk a célfüggvényt az a paraméter szerint. Ezután a kapott új a értéket felhasználva újraszámítjuk a nevezőt, s a célfüggvényt ismét minimalizáljuk a nevezőt fix értéken tartva. Ezt az eljárást az a értékének konvergenciájáig folytatjuk. A konvergencia teljesülése után meghatározzuk a b tengely-metszetet, a paraméterek becsült hibáit, kovarianciáját és a lineáris korrelációs koefficienst. A tapasztalat azt mutatja, hogy a paraméterekre kapott közelítő értékek általában csak kissé térnek el az egzakt értékektől. A kérdéses módszert iteratív általános lineáris legkisebb négyzetek (iteratív GLLS) módszerének nevezzük.

Az iteratív GLLS-módszer végrehajtására a következő programot (glls.f) készítettük:

c*********************************************************************** program main c*********************************************************************** * Program GLLS performs linear regression via the iterative GLLS * * method. * * y=a*x+b *

Page 133: Computational Chemistry

Tasi Gyula: Számítógépes kémia

133

* (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) character title*70 dimension x(50),y(50),s2x(50),s2y(50),w(50),yc(50),e(50) data tol/1.d-6/ read(*,'(a70)') title read(*,*) m do i=1,m read(*,*) x(i),s2x(i),y(i),s2y(i) end do write(*,'(a/)') 'Iterative GLLS method (G. Tasi)' write(*,'(a,a70/)') 'Title: ',title write(*,'(a)') ' iteration a delta_a' do i=1,m w(i)=1.d0 end do ii=0 a0=0.d0 1 ii=ii+1 sw=0.d0 sxw=0.d0 syw=0.d0 sx2w=0.d0 sxyw=0.d0 do i=1,m sw=sw+w(i) sxw=sxw+w(i)*x(i) syw=syw+w(i)*y(i) sx2w=sx2w+x(i)*x(i)*w(i) sxyw=sxyw+w(i)*x(i)*y(i) end do anumer=sw*sxyw-sxw*syw adenum=sw*sx2w-sxw*sxw c c a - slope c a=anumer/adenum write(*,'(i8,2f18.8)') ii,a,dabs(a-a0) if((ii.gt.1).and.(dabs(a-a0).lt.tol)) goto 2 do i=1,m w(i)=1.d0/(s2y(i)+a*a*s2x(i)) end do a0=a goto 1 2 continue c c b - intercept c b=(sx2w*syw-sxw*sxyw)/(sw*sx2w-sxw*sxw) c sd2w=0.d0 sy2w=0.d0 do i=1,m

Page 134: Computational Chemistry

Tasi Gyula: Számítógépes kémia

134

yc(i)=a*x(i)+b e(i)=y(i)-yc(i) sd2w=sd2w+w(i)*e(i)*e(i) sy2w=sy2w+y(i)*y(i)*w(i) end do c c sea - SE(a) c sea=sw*sd2w/(m-2)/(sw*sx2w-sxw*sxw) sea=dsqrt(sea) c c seb - SE(b) c seb=sx2w*sd2w/(m-2)/(sw*sx2w-sxw*sxw) seb=dsqrt(seb) c c covab - cov(a,b) c covab=-sxw*sd2w/(m-2)/(sw*sx2w-sxw*sxw) c c r - rxy c r=(sw*sxyw-sxw*syw)/dsqrt(sw*sx2w-sxw*sxw)/dsqrt(sw*sy2w-syw*syw) c c sr2 - residual variance c sr2=sd2w/(m-2) c c sr - SD standard deviation c sr=dsqrt(sr2) write(*,'(/a/)') '- Parameters & their statistical analysis -' write(*,'(a,d16.8,5x,a,f16.8)') 'a= ',a,' +- ',sea write(*,'(a,d16.8,5x,a,f16.8)') 'b= ',b,' +- ',seb write(*,'(a,f15.5)') 'rxy= ',r write(*,'(a,f15.5)') 'cov(a,b)= ',covab write(*,'(a,f15.5)') 'rab= ',covab/sea/seb write(*,'(3(a,d13.6))') & 'Smin= ',sd2w,' sr2= ',sr2,' sr= ',sr write(*,'(/a/)') '- Original & computed data -' write(*,'(a)') & ' xi yi wi yc(i) & ei' do i=1,m write(*,'(2f15.8,d16.6,2f15.8)') x(i),y(i),w(i),yc(i),e(i) end do end

A kérdéses iteratív eljárás általában néhány iteráció után konvergál. Érdemes megemlíteni, hogy a módszer akkor is alkalmazható, ha a független változó hibamentes. Ekkor a nevező független lesz az a paraméter értékétől, s az eljárás egy lépés után konvergál. Végül is ez a kis program minden esetben (OLLS, WLLS és GLLS) alkalmazható!

Végezzük el a következő táblázatban látható adatok kiértékelését mindhárom módszerrel, s vessük össze a kapott számítási eredményeket az (MK: 2-5.) fejezetben közölt eredmé-nyekkel!

Page 135: Computational Chemistry

Tasi Gyula: Számítógépes kémia

135

ix 2ˆix iy 2ˆ

iy

0.75 0.00066667 0.2356 0.00004733 0.97 0.00060556 0.2904 0.00004630 1.18 0.00112889 0.3375 0.00001729 1.38 0.00121778 0.3864 0.00002099 1.48 0.00165000 0.4402 0.00004282 1.71 0.00088444 0.4862 0.00011059 1.92 0.00129333 0.5402 0.00007666 2.10 0.00204556 0.6000 0.00006204 2.32 0.00151222 0.6622 0.00011690 2.44 0.00132111 0.7682 0.00039522

Itt csak az iteratív GLLS-módszerrel kapott számítási eredményeket mutatjuk be:

Iterative GLLS method (G. Tasi) Title: keveres iteration a delta_a 1 0.29479623 0.29479623 2 0.28115058 0.01364566 3 0.28092213 0.00022845 4 0.28091833 0.00000380 5 0.28091827 0.00000006 - Parameters & their statistical analysis - a= 0.28091827D+00 + 0.01078296 b= 0.13876566D-01 + 0.01617215 rxy= 0.99416 cov(a,b)= -0.00016 rab= -0.94239 Smin= 0.154995D+02 sr2= 0.193744D+01 sr= 0.139192D+01 - Original & computed data - xi yi wi yc(i) ei 0.75000000 0.23560000 0.100060D+05 0.22456527 0.01103473 0.97000000 0.29040000 0.106284D+05 0.28636728 0.00403272 1.18000000 0.33750000 0.940057D+04 0.34536012 -0.00786012 1.38000000 0.38640000 0.854035D+04 0.40154377 -0.01514377 1.48000000 0.44020000 0.577935D+04 0.42963560 0.01056440 1.71000000 0.48620000 0.554368D+04 0.49424680 -0.00804680 1.92000000 0.54020000 0.559524D+04 0.55323964 -0.01303964 2.10000000 0.60000000 0.447496D+04 0.60380492 -0.00380492 2.32000000 0.66220000 0.423304D+04 0.66560694 -0.00340694 2.44000000 0.76820000 0.200210D+04 0.69931713 0.06888287

A most bemutatott példában modellünk paramétereinek fizikai tartalma nem volt érdekes számunkra: az illesztés interpoláció-extrapoláció végrehajtása szempontjából volt fontos. Más esetekben azonban, ha a paraméterek fontos fizikai jelentéssel rendelkeznek, nagy hibát követhetünk el a regressziós modell helytelen megválasztásával, különösen az egyszerű OLLS-módszer körültekintés nélküli alkalmazásával. Itt érdemes megjegyezni azt is, hogy a kereskedelmi forgalomban kapható statisztikai szoftverek általában nem képesek GLLS-típusú lineáris regressziós számítások végzésére.

Page 136: Computational Chemistry

Tasi Gyula: Számítógépes kémia

136

A bevezető fizikai-kémiai laboratóriumi gyakorlatok valamelyikében valószínű, hogy egy tiszta anyag (pl. víz) telített gőznyomását (tenzióját) kell regisztrálni a hőmérséklet függvé-nyében annak érdekében, hogy a CLAUSIUS-CLAPEYRON-egyenlet integrált formája segítségé-vel meghatározzuk a kérdéses anyag párolgási entalpiáját (párolgási hőjét, Eng. enthalpy of vaporization). Először is vezessük le a CLAUSIUS-CLAPEYRON-egyenletet!

Tiszta anyag esetén, ha a folyadék és a gőz között egyensúly áll fenn, akkor

( ) ( ).g fdG dG A GIBBS-DUHEM-egyenlet (MK: 2-2.) alapján írhatjuk, hogy

( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ,f f f f g g g gV dp S dT V dp S dT

amiből, mivel ( ) ( )f gdp dp és ( ) ( )f gdT dT , kapjuk, hogy

( ) ( )

( ) ( ).

g fvap

g fvap

Sdp S S

dT V V V

Ez a CLAUSIUS-CLAPEYRON-egyenlet differenciális formája. Egyensúly esetén azonban fennáll, hogy

0,vap vap vapG H T S

azaz

.vapvap

HS

T

Ennek megfelelően a fenti egyenletünk következőképpen írható:

.vap

vap

Hdp

dT T V

Ha a gőzt tökéletes gázként kezeljük, s moláris mennyiségekkel számolunk, akkor

( )gm

RTV

p

és ( ) ( ) ,g fm mV V azaz ( )g

vap mV V , így

,

2

ln.m vapHd p

dT RT

Ha a párolgási hő hőmérséklettől való függését elhanyagoljuk, amit kis hőmérséklet-interval-lumban jó közelítéssel megtehetünk, akkor az előző egyenlet integrálása útján megkaphatjuk a CLAUSIUS-CLAPEYRON-egyenlet integrált formáját:

,ln ,m vapHp C

RT

amit felírhatunk exponenciális alakban is:

,exp ,m vapHp A

RT

ahol exp( ).A C

Page 137: Computational Chemistry

Tasi Gyula: Számítógépes kémia

137

A következőkben határozzuk meg a víz párolgási entalpiáját mérési eredményekből [Gilbert F. Pollnow: Least Squares Fit for Two Forms of the Clausius-Clapeyron Equation, J. Chem. Educ., 48, 518 (1971)]:

T/K 273.15 298.15 308.15 333.15 358.15 368.15 373.15 p/torr 4.60 23.80 42.20 149.50 433.80 634.00 760.00

Ábrázoljuk a p vs. T és az ln p vs. 1/T adatokat:

Látható, hogy az előbbi kapcsolat jó közelítéssel exponenciális, az utóbbi pedig lineáris. Alkalmazzuk az OLLS-módszert (olls2.f) az utóbbi esetben. Kapjuk, hogy

, 43.18 0.23 kJ/mol;

0.02498;

0.99993.

m vap

r

XY

H

s

r

A reziduális szórás az ln p értékekre vonatkozik. Nemlineáris regressziót végezve, hajtsuk végre a görbeillesztést az exponenciális kifejezés esetén is a szimplex-rutinnal (smplx.f):

, 41.96 0.18 kJ/mol;

1.49469.

m vap

r

H

s

A reziduális szórás itt a p értékekre vonatkozik. Az eltérés a párolgási hő értékeiben nem tűnik nagynak, 1.22 kJ/mol, de jóval nagyobb, mint a becsült hibák! Felmerül a kérdés, hogy melyiket fogadjuk el pontosabb kísérleti értéknek?

A szimplex-módszer eredetileg nem rendelkezett hibaanalízissel. Kis programozási mun-kával azonban ez a hiba könnyen korrigálható. Egyedül a V variancia-kovariancia mátrixot kell meghatároznunk a minimumban (MK: 2-5.):

122 ,rs V H

Ahol 2rs a reziduális variancia és 1H a minimumban számított HESSE-mátrix inverze. A paraméterek becsült hibái a V mátrix diagonális elemeiből, míg a korreláltságot kifejező becsült korrelációs együtthatók az off-diagonális kovarianciákból és a diagonális varian-ciákból származtathatók (MK: 2-4.):

260 280 300 320 340 360 3800

100

200

300

400

500

600

700

800

p/to

rr

T/K

0.0026 0.0028 0.0030 0.0032 0.0034 0.0036 0.0038

2

4

6

8

ln(p

/torr

)

1/T (K-1)

Page 138: Computational Chemistry

Tasi Gyula: Számítógépes kémia

138

ˆ ˆSE Var ;i i iip p V

ˆ ˆ

ˆ ˆCov( , ),

ˆ ˆSE SEi j

i j ijp p

i j ii jj

p p Vr

p p V V

ahol a számlálóban az i és a j paraméterek becsült kovarianciája szerepel. A további részletek megtalálhatók a következő munkában: G.R. Phillips, E.M. Eyring, Error Estimation Using The Sequential Simplex Method in Nonlinear Least Squares Data Analysis, Analytical Chemistry, 60, 738 (1988). Az egyszerűség kedvéért az inverz HESSE-mátrixot numerikusan is számíthatjuk.

Felmerül a kérdés, hogy az előző példánkban mely fizikai menyiségeket mérjük? Ezek a p és a T. Miért akarjuk akkor az ln p értékekre vonatkozó reziduális hibákat minimalizálni? Ha az előbbi lineáris regresszió végrehajtása után kiszámítjuk a p-re vonatkozó reziduális szórást, akkor 8.16224-et kapunk, ami több mint 5-szöröse a nemlineáris regresszióénak! Ha a kiértékelés érdekében transzformáljuk a fizikai mennyiségeket, akkor a hibáik is transzfor-málódnak, amit figyelembe kell vennünk a kiértékeléskor (MK: 2-5.)! Mindent figyelembe véve a nemlineáris regresszió eredményét kell elfogadnunk. Linearizálás után mindenféle korrekció nélkül csak akkor kapunk nagyon pontos eredményt, ha a hibák elenyészők. Nemlineáris regressziót természetesen körülményesebb végrehajtani, így felmerül a kérdés, hogy lineáris regresszióval valamilyen módon megkaphatnánk-e közelítőleg a jó eredményt? A válasz erre a kérdésre: igen, megkaphatjuk, ha a WLLS-módszert megfelelő súlyfakto-rokkal alkalmazzuk. Már csak az a kérdés: hogy válasszuk meg a súlyfaktorokat? A követke-zőkben nézzük meg a kérdést alaposabban.

Tegyük fel, hogy az ( , )i ix y kísérleti adatok esetén az xi értékeket hibamentesen tudjuk

mérni, azaz az összes hibát az yi értékek tartalmazzák:

2

;

, ;

,

i i i

i i

i i

y y

y f x

D

p

ahol iy az xi-hez tartozó pontos (hibamentes) y-érték és i a véletlenszerű hiba. Ha az u transzformációt alkalmazzuk a függőváltozóra, akkor az ( , )y f x p függvény helyett az

( ) [ ( , )]y u y u f x p összefüggés paramétereit becsüljük az ( )i iy u y értékek felhaszná-lásával:

.i i i iy u y u y

Elsődleges célunk az i hiba szórásának a meghatározása. Fejezzük ki i -t az előző össze-függések segítségével:

,i i i i i i y i iu y u y u y u y u y

mivel

.

i

i i iy i

iy y

u y u yuu y

y

Ebből következik (MK: 2-4.), hogy

Page 139: Computational Chemistry

Tasi Gyula: Számítógépes kémia

139

2 22 2 2 .i y i i y i iD u y D u y

Ennek megfelelően a súlyfaktorokat következőképpen választhatjuk meg:

2

1.i i

y i

w wu y

Alkalmazzuk most a WLLS-módszert a víz párolgási hőjének a meghatározására. A transzformációt leíró összefüggéseink a következők:

2 2

ln( );

1;

.

p ii

i i i i

p u p p

u pp

w p w p

A WLLS-módszer alkalmazásával is hajtsuk végre a lináris regressziót:

, 41.95 0.18 kJ/mol;

0.07847 (ln );

1.49496 ( ).

m vap

r

r

H

s p

s p

Látható, hogy az eredmény szinte teljesen megegyezik a korábbi nemlineáris regresszió ered-ményével. Ez azt jelenti, hogy megfelelő súlyozással jelen esetben sikerült megszüntet-nünk a linearizálásnak a becslésre gyakorolt káros hatását. Most nézzük meg az általános eset precíz megoldását!

Tegyük fel, hogy az ( , ), 1, ,i ix y i m kísérleti adataink mind hibával terheltek, és van egy f() matematikai modellünk egy p paramétervektorral mint argumentummal , ami a változók közötti kapcsolatot hivatott kvantitatíve leírni:

;

;

; .

i i xi

i i yi

i i

x x

y y

y f x

p

Az egyszerűség kedvéért egy független és egy függő változót tekintünk. Tegyük fel továbbá azt is, hogy a véletlenszerű hibáink normális eloszlásúak zérus várhatóértékkel, nemzérus varianciával és függetlenek egymástól:

2 2

0;

;

Cov , 0 ( );

yi

yi yi

yi yj

E

D

i j

2 2

0;

;

Cov , 0 ( ).

xi

xi xi

xi xj

E

D

i j

Itt hallgatólagosan azt is feltételezzük, hogy a független és a függő változóink hibái között nincs kapcsolat.

Page 140: Computational Chemistry

Tasi Gyula: Számítógépes kémia

140

Az LS-módszer filozófiájának megfelelően a fő célunk annak az optimális p vektornak a

meghatározása, ami minimalizálja az ( )S p függvényt, azaz az ˆxi i iR x x és az ˆyi i iR y y

reziduumok súlyozott összegét:

2 2

1 1

( ) ,m m

yi yi xi xii i

S w R w R

p

ahol 2yi yiw és 2

xi xiw . A célfüggvény minimalizálása a kísérleti és a számított pontok

közötti merőleges távolságok súlyozott összegének a minimalizálását jelenti. Megmutatható, hogy bizonyos feltételek teljesülése esetén az előbbi egyenletünk új súlyfaktorok bevezetésével a következő egyszerűbb alakra hozható:

2

1

( ) .m

i yii

S w R

p

Ez azt jelenti, hogy az Rxi reziduumok súlyozott összegétől eltekinthetünk. Például, ha az x-értékekben nem túl nagy a hiba, akkor

22

1.i

yi xi

wfx

Ha a modellünk egy kétparaméteres egyenes, azaz

; , ,i i iy f x a b a x b

akkor

2 2 2

1.i

yi xi

wa

Ez az a formula, amit IRVIN és QUICKENDEN az iteratív GLLS-módszer esetén alkalmaztak (lásd az előzőeket). A részletek iránt érdeklődőknek a következő műveket ajánljuk további tanulmányozásra: W.E. Deming: Statistical Adjusment of Data, John Wiley & Sons, New York (1943); Wolberg: Prediction Analysis, Van Nostrand, Princeton (1967); D.R. Powell, J.R. Macdonald: A rapidly convergent iterative method for the solution of the generalised nonlinear least squares problem, Computer Journal, 15, 148 (1972). A következőkben nézzünk egy nagyon tanulságos példát az általános módszer alkalmazására!

Az enzimek a fehérjéknek különösen fontos csoportját képezik: az élő sejtek katalizátorai. A növényi és az állati szervezetekben végbemenő kémiai átalakulások enzimek jelenlétét feltételezik. Az enzimek katalitikus aktivitásáért az ún. aktív centrum a felelős, amely a polipeptidlánc meghatározott részeinek különleges hajtogatottsága révén jön létre. Az enzimekre nagyfokú szubsztrát- és reakcióspecifitás jellemző, azaz csak meghatározott anyagok meghatározott átalakulását katalizálják. Egy enzimkatalitikus reakció első közelítés-ben a következő reakciósorozattal írható le:

1 2

1

,k k

kE S ES P E

ahol E az enzim, S a szubsztrátum, ES az enzim-szubsztrátum komplex, és P a termék. A MICHAELIS-MENTEN-hipotézis [Michaelis, L, Menten, M.L.: Biochem. Z., 49, 333 (1913)]

Page 141: Computational Chemistry

Tasi Gyula: Számítógépes kémia

141

szerint az ES-komplex gyorsan kialakul és a reakciórendszer sebességmeghatározó lépése a kérdéses komplex elbomlása. Ez matematikailag azt jelenti, hogy [ ] 0d ES dt , valamint

2 1k k , és végül a következő egyenlethez jutunk (MK: 2-6.):

max[ ][ ] [ ],

[ ]M

V Sd P d Sr

dt dt K S

ahol

max 2 0[ ] .V k E

A kérdéses egyenletet MICHAELIS-MENTEN-egyenletnek nevezzük. Az egyenlet két paramé-tert ( MK és maxV ) tartalmaz. Látható, hogy [ ]S esetén maxr V , azaz maxV az enzim-reakció maximális sebessége. A MK pedig az ún. MICHAELIS-MENTEN-állandó. Fizikai jelen-tése a következő összefüggésből egyértelművé válik:

max max[ ],

2 [ ]M

V V Sr

K S

amiből [ ]MK S következik. Ez azt jelenti, hogy MK azzal a szubsztrát-koncentrációval egyenlő, amelynél az enzimreakció sebessége a maximális érték fele. Az enzimreakció sebességét a két paraméter együttesen határozza meg. Az irodalomban többféle módszert publikáltak a két paraméter értékének kísérleti adatokból történő becslésére.

Leggyakrabban az eredeti összefüggés valamilyen linearizált formáját alkalmazzák. Ezek közül válasszuk ki az egyiket:

max max

1 1 1.

[ ]MK

r V S V

Míg az eredeti összefüggés közvetlen alkalmazása nemlineáris paraméterbecslést igényel, addig az utóbbi forma már lineáris regresszió végrehajtására alkalmas (1 vs.1 [ ]r S ). Az y-tengelymetszet 1/Vmax, az x-tengelymetszet pedig 1/KM. A meredekség pedig a két paramé-ter hányadosa.

A következő kísérleti adatok D.P. CHONG cikkében jelentek meg [D.P. Chong: On the use of least squares to fit data in linear form, J. Chem. Educ., 71, 489 (1994)]:

[S] SE([S]) r SE(r)

0.138 0.011 0.148 0.015 0.220 0.015 0.171 0.015 0.291 0.017 0.234 0.019 0.560 0.028 0.324 0.023 0.766 0.031 0.390 0.023 1.460 0.044 0.493 0.025

A táblázatban szereplő mennyiségek dimenziójával az egyszerűség kedvéért ne foglalkoz-zunk. Hasonlóan azzal sem, hogy milyen enzim milyen reakciójáról van szó. Most kizárólag a csupasz számadatok érdekelnek bennünket. Az [S] a szubsztrátum koncentrációja és az r a kezdeti reakciósebesség. A táblázat tartalmazza a becsült experimentális hibákat is. Az 1 vs.1 [ ]r S lineáris regresszió végrehajtásához a táblázat adataiból további adatokat kell elő-állítanunk:

Page 142: Computational Chemistry

Tasi Gyula: Számítógépes kémia

142

1 [ ]S SE 1 [ ]S 1 r SE 1 r

7.2464 0.5776 6.7568 0.6848 4.5455 0.3099 5.8480 0.5130 3.4364 0.2008 4.2735 0.3470 1.7857 0.0893 3.0864 0.2191 1.3055 0.0528 2.5641 0.1512 0.6849 0.0206 2.0284 0.1029

Hajtsuk végre a lineáris regressziókat a glls.f kód segítségével:

Módszer Paraméterek

OLLS 0.4406MK

max 0.5853V 0.97912r

WLLS 0.5552MK

max 0.6715V 0.98928r

GLLS (iteratív) 0.5671MK

max 0.6773V 0.98983r

Mutassuk be részletesen az iteratív GLLS számítási eredményeket:

Iterative GLLS method (G. Tasi) Title: Enzyme catalysis (linearized data) iteration a delta_a 1 0.75279807 0.75279807 2 0.83572832 0.08293025 3 0.83724960 0.00152128 4 0.83727754 0.00002794 5 0.83727805 0.00000051 - Parameters & their statistical analysis - a= 0.83727805D + 0.06016174 b= 0.14764609D + 0.09309942 rxy= 0.98983 cov(a,b)= -0.00438 rab= -0.78195 Smin= 0.218221D sr2= 0.545553D sr= 0.738616D - Original & computed data - xi yi wi yc(i) ei 7.24640000 6.75680000 0.142282D 7.54371258 -0.78691258 4.54550000 5.84800000 0.302577D 5.28230829 0.56569171 3.43640000 4.27350000 0.672607D 4.35368320 -0.08018320 1.78570000 3.08640000 0.186584D 2.97158832 0.11481168 1.30550000 2.56410000 0.402969D 2.56952740 -0.00542740 0.68490000 2.02840000 0.918619D 2.04991264 -0.02151264

Page 143: Computational Chemistry

Tasi Gyula: Számítógépes kémia

143

A fenti táblázat alapján a következő megállapításokat tehetjük. Nem meglepő módon a legrosszabb eredményt az OLLS-módszer, a legjobbat pedig a GLLS-módszer szolgáltatja. Az eredményeink az mutatják, hogy lineáris regressziónál fontos figyelembe vennünk mind-két változónk hibáját, amennyiben azok rendelkezésünkre állnak. Sajnos, a reciprokmennyi-ségekre még a GLLS-módszerrel végrehajtott lineáris regresszió eredménye is eltér az eredeti összefüggés közvetlen felhasználásával vérehajtott nemlineáris regresszió eredményétől. A következő táblázat az eredeti függvénnyel kapott eredményeket mutatja nemlineáris regressziót végezve:

Módszer Paraméterek

OLS 0.5965MK

max 0.6904V WLS 0.5869MK

max 0.6849V GLS (szimplex) 0.5860MK

max 0.6854V

A célfüggvény minimalizálását a szimplex-eljárással végeztük el. Látható, hogy ebben az esetben a különböző módszerekkel kapott eredmények sokkal kisebb mértékben térnek el egymástól. Vessük össze a lineáris és a nemlineáris regressziók legjobb eredményét egymás-sal!

Módszer Paraméterek

GLLS (szimplex) 0.5721MK

max 0.6797V GLS (szimplex) 0.5860MK

max 0.6854V

Látható, hogy a paraméterek, ha kismértékben is, de különböznek! Határozzuk meg az elté-réseket: : 2.4%MK és max : 0.8%.V

A következő paraméterbecslési problémával C.A. CANTRELL foglalkozott az Atmospheric Chemistry and Physics folyóiratban [C.A. Cantrell: Technical Note: Review of methods for linear least-squares fitting of data and application to atmospheric chemistry problems, Atmos. Chem. Phys., 8, 5477-5487 (2008)]. Végezzünk lineáris regressziót az ún. PEARSON-YORK adatokra [K. Pearson: On lines and planes of closet fit to systems of points in space, Philos. Mag., 2(2), 559-572 (1901) és D. York: Least-squares fitting of a straight line, Can. J. Phys., 44, 1079-1086 (1966)]:

Page 144: Computational Chemistry

Tasi Gyula: Számítógépes kémia

144

Sorszám xi [1/xi]2 yi [1/yi]

2

1. 0.0 1000.0 5.9 1.0 2. 0.9 1000.0 5.4 1.8 3. 1.8 500.0 4.4 4.0 4. 2.6 800.0 4.6 8.0 5. 3.3 200.0 3.5 20.0 6. 4.4 80.0 3.7 20.0 7. 5.2 60.0 2.8 70.0 8. 6.1 20.0 2.8 70.0 9. 6.5 1.8 2.4 100.0 10. 7.4 1.0 1.5 500.0

A kérdéses probléma egzakt megoldása ismert, ezért gyakran alkalmazzák új paraméterbecslő eljárások tesztelésére. Végezzük el úgy is a kétparaméteres egyenessel való illesztést, hogy felcseréljük a változókat! Ha jó módszert alkalmazunk és a hibamodelleink is korrektek, akkor ugyanazt a megoldást kapjuk mindkét esetben, azaz a paraméterek becsült értékét meg-kaphatjuk egymásból:

;

;

1ˆ ;

ˆˆ

ˆ .ˆ

i i

i i

y a x b

x a y b

aa

bb

a

Haladjunk az egyszerűbb illesztési módszerektől a bonyolultabbak felé, s hajtsuk végre a becslések statisztikai analízisét is. A probléma megoldása során rendkívül sok tapasztalatra tehetünk szert.

Page 145: Computational Chemistry

Tasi Gyula: Számítógépes kémia

145

Feladatok:

11.1 Az alábbi reakció sebességi állandóját hat különböző hőmérsékleten határozták meg etanolban [G.M. Barrow, Physical Chemistry, 5th edition, McGraw-Hill Book Company, New York (1988), 711. o.]:

3 2 5 3 2 5CH I+C H OH CH OC H +HI.

T/K 105 k/dm3 mol1 s1

273.15 5.6

279.15 11.8

285.15 24.5

291.15 48.8

297.15 100.0

303.15 208.0

A kísérleti eredmények alapján határozzuk meg a reakció ARRHENIUS-paramétereit mind lineáris, mind nemlineáris regresszióval!

11.2 Mértük cigaretták kátrány- (K) és nikotintartalmát (N). Az alábbi mérési eredményeket kaptuk cigarettaszálanként (mg):

K 8.29 12.31 18.79 22.91 23.09 24.02 27.31 30.02 35.91 41.59

N 0.33 0.47 1.10 1.33 1.27 1.45 1.42 1.97 2.24 2.21

Határozza meg a legkisebb négyzetek módszere segítségével a két változó közötti kapcso-latot! Ábrázolja az eredményeket grafikusan is!

11.3 Értékelje ki az alábbi méréssorozatot! Tudjuk, hogy a független változó hibamentes, a függő változó azonban hibával terhelt. A hiba megállapítása érdekében független kísérleteket végeztünk. Hajtson végre másodfokú polinomiális illesztést úgy, hogy a polinom az origóból indul!

Page 146: Computational Chemistry

Tasi Gyula: Számítógépes kémia

146

xi yi (1) yi (2) yi (3) yi (4) yi (5) yi (6) yi (7) yi (8) yi (9)

0.015 0.1333 0.1333 0.1333 0.1333 0.1333 0.1333 0.1333 0.1333 0.13330.047 0.3333 0.3667 0.3833 0.3667 0.3833 0.3833 0.3833 0.4000 0.40000.079 0.7667 0.8667 0.8500 0.8500 0.8500 0.8667 0.8500 0.9333 0.95000.111 1.3000 1.4667 1.4333 1.3833 1.4000 1.5000 1.4000 1.4500 1.46670.143 1.8667 2.0333 1.9833 1.9667 1.9667 2.0167 1.9833 2.0167 2.03330.175 2.5000 2.6833 2.5667 2.5167 2.5833 2.5833 2.5333 2.6167 2.66670.207 3.1667 3.4000 3.2500 3.1667 3.2667 3.2333 3.1667 3.2500 3.30000.239 3.8500 4.1333 3.9333 3.9000 3.8333 3.8833 3.8000 3.9500 3.96670.271 4.5833 4.9500 4.7500 4.6167 4.5167 4.6333 4.5000 4.6667 4.61670.303 5.3167 5.6833 5.4167 5.3833 5.2500 5.3333 5.2000 5.4333 5.36670.335 6.0833 6.5333 6.1500 6.2000 6.3667 6.0833 5.8667 6.2167 6.08330.367 6.8833 7.3667 6.9167 6.9167 6.7500 6.8333 6.5500 6.9833 6.83330.399 7.6833 8.1500 7.6333 7.7167 7.5333 7.5833 7.3500 7.7500 7.56670.431 8.5667 9.0167 8.5167 8.5333 8.2500 8.3833 8.1167 8.6667 8.3500

11.4 Az alábbi kísérleti adatok állnak rendelkezésünkre a toluol gőznyomásának hőmér-sékletfüggésére [Timmermans, J.: Physico-Chemical Constants of Pure Organic Compounds, Elsevier, New York (1950)]:

Pitzer & Scott (1943) Schmidt (1934)

t/C p/Pa t/C p/Pa

12.5 1920 17.68 2626

25.0 3786 25.14 3892

37.5 7025 32.24 5479

Döntse el, hogy melyik szerző adatai megbízhatóbbak! A toluol kalorimetrikusan meghatáro-zott párolgáshője 25 C-on 412.3 J/g.

11.5 A tiszta n-propanol gőznyomása érdekel minket 25 C hőmérsékleten. A következő adatok állnak rendelkezésünkre [Timmermans, J.: Physico-Chemical Constants of Pure Organic Compounds, Elsevier, New York (1950)]:

Page 147: Computational Chemistry

Tasi Gyula: Számítógépes kémia

147

Young (1910) Richardson (1886)

t/C p/torr t/C p/torr

10 7.26 14.9 10.96

20 14.5 20.7 15.46

30 27.6 23.7 18.82

40 50.2 28.2 24.96

33.8 34.90

Azt az adatsort használja fel, amelyik statisztikailag megbízhatóbb! A kérdéses paraméter becsült értékét hibabecsléssel adja meg!

*11.6 A korábbiakban láttuk, hogy a kiugró pontok felderítésének kérdése problematikussá teheti az OLLS-módszer alkalmazását. Alternatívaként a THEIL-módszert alkalmazhatjuk, melyet speciálisan arra terveztek, hogy csökkentsék a kiugró pontok hatását az egyenes meredekségére és a tengelymetszetére [P. Glaister, Robust Linear Regression Using Theil’s Method, J. Chem. Educ., 82, 1472 (2005)]. Készítsen egy olyan programot, amely a THEIL-módszer alapján végez egyenesillesztést!

*11.7 Az előzőek alapján egészítse ki a szimplex-módszert hibaanalízissel! A HESSE-mátrix számítását numerikusan hajtsa végre! Az invertálást GAUSS-eliminációval, vagy LU-faktori-zációval oldja meg (lásd a 15. projektet)!

*11.8 Roman M. BALABIN 2009-ben RAMAN spektroszkópiával tanulmányozta a n-bután és a n-pentán konformerjeinek a relatív stabilitását [R.M. Balabin: Enthalpy Difference between Conformations of Normal Alkanes: Raman Spectroscopy Study of n-Pentane and n-Butane, J. Phys. Chem. A, 113, 1012-1019 (2009)]. BALABIN a kísérleti eredmények kiértékelésekor az OLLS-módszert alkalmazta linearizált összefüggés esetén. Megállapította, hogy a korábbi kísérleti referencia-adatoknál pontosabb adatokat kapott, s megjegyezte, hogy az ab initio kvantumkémiának kb. 5-10 év szükséges ahhoz, hogy ezeket az értékeket reprodukálni tudja. A kérdéses cikk folyományaként további cikkek születtek [G. Tasi; B. Nagy: Comment on “Enthalpy Difference between Conformations of Normal Alkanes: Raman Spectroscopy Study of n-Pentane and n-Butane”. J. Phys. Chem. A, 114, 6728 (2010); R.M. Balabin: Reply to “Comment on ‘Enthalpy Difference between Conformations of Normal Alkanes:Raman Spectroscopy Study of n-Pentane and n-Butane’”, J. Phys. Chem. A, 114, 6729 (2010)], melyekből kiderül, hogy tizenegy évvel korábban már publikáltak olyan számítási ered-ményeket, melyek szinte hajszálpontosan megegyeztek BALABIN kísérleti eredményeivel. Most vizsgáljuk meg BALABIN kísérleti eredményeit! Helyesen értékelte ki őket?

Page 148: Computational Chemistry

Tasi Gyula: Számítógépes kémia

148

12. Molekulák szerkezetének meghatározása A molekulaszerkezet, a molekulageometria fogalma központi szerepet tölt be a kémikusi

gondolkodásban. Molekulák szerkezetének a tanulmányozása kémiai és fizikai kísérletekkel már a kvantummechanika kémiai alkalmazása, a kvantumkémia létrejötte előtt megkezdődött. Gondoljunk például a szerves kémiai tanulmányokból ismeretes, leleményes szerkezet-bizonyító szintézisekre és az alap fizikai-kémiai laboratóriumi gyakorlatokon végzett elektromos dipólusmomentum-mérésekre. Molekulák szerkezetének kvantitatív kísérleti tanulmányozására napjainkban elsősorban spektroszkópiai (MW, IR, UV-Vis, NMR, ...) és diffrakciós módszereket (XR, ED, ND, ...) használnak [P. Hedvig: Experimental Quantum Chemistry, Akadémiai Kiadó: Budapest (1975); T. Engel: Quantum Chemistry and Spectroscopy, Pearson Education: San Francisco (2006)].

Bonyolult kvantumkémiai számítások révén általában az alapállapotú molekulák ún. egyensúlyi geometriáját (Eng. equilibrium geometry) szeretnénk minél pontosabban meghatá-rozni. Az egyensúlyi geometria fogalma szorosan kapcsolódik a BORN-OPPENHEIMER-közelítés keretén belül számítható potenciális energiafelület (PES, Eng. potential energy surface) fogalmához: nevezetesen annak a minimumának felel meg. Ennek megfelelően a kvantumkémiai számítások során a molekula teljes elektronenergiáját minimalizáljuk valami-lyen elméleti szinten az optimális molekulageometria meghatározása érdekében. Nem megle-pő módon, kezdetben az előzőekben részletesen tárgyalt és sokszor alkalmazott, robosztus szimplex-eljárást alkalmazták a minimalizálásra. Többatomos molekulák PES-e azonban bonyolult sokváltozós függvény, így ebben az esetben a szimplex-módszer már nem tekint-hető hatékony eljárásnak.

Az elméleti és a kísérleti molekulageometriák különböző típusait és a köztük levő kapcso-latot részletesen tárgyalja a következő cikk a vízmolekula példáján: A.G. Császár, G. Czakó, T. Furtenbacher, J. Tennyson, V. Szalay, S.V. Shirin, N.F. Zobov, O.L. Polyansky, On equilibrium structures of the water molecule, Journal of Chemical Physics, 122, 214305 (2005).

Napjaink modern kvantumkémiai programjaiban valamilyen gradiensmódszert alkalmaz-nak a molekulageometria optimalizálására. Peter PULAY (Pulay Péter, 1941, Veszprém) magyar származású amerikai elméleti kémikus használt először 1969-ben analitikus gradiens-vektort molekulageometria optimalizálására és erőállandók számítására [P. Pulay: Ab initio calculation of force constants and equilibrium geometries in polyatomic molecules, Molecular Physics, 17(2), 197-204 (1969)]. A PULAY-féle ún. erőmódszer (Eng. force method) jelentőségét hamar felismerte a kvantumkémiai közösség. PULAY cikke mérföld-kőnek tekinthető: a kvantumkémia egy új korszakát nyitotta meg, melyben az analitikus deriváltak számítása és alkalmazása természetes dolog. A világ kvantumkémiai közössége 2007-ben konferencián ünnepelte meg PULAY professzor 65. születésnapját [Molecular Quantum Mechanics: Analytic Gradients and Beyond, A Conference in Honor of Peter Pulay, Budapest, May 29 June 3, 2007]. A konferencia résztvevői egy könyvet is kaptak Pulay professzor legfontosabb cikkeivel és azok jelentőségének méltatásával [A.G. Császár, G. Fogarasi, H.F. Schaefer III, P.G. Szalay: Molecular Quantum Mechanics: Analytic Gradients and Beyond, Selected papers of Peter Pulay, ELTE Institute of Chemistry, Budapest, 2007].

Page 149: Computational Chemistry

Tasi Gyula: Számítógépes kémia

149

A könyvben többek között megismerkedhetünk a DIIS (Eng. Direct Inversion in the Iterative Subspace) optimalizálási módszerrel [P. Pulay: Convergence Acceleration in Iterative Sequences: The Case of SCF Iteration, Chem. Phys. Lett., 73, 393-398 (1980); P. Pulay: Improved SCF Convergence Acceleration, J. Comput. Chem., 3, 556-560 (1982)], melynek egy továbbfejlesztett változata (GDIIS) kitünően alkalmazható alapállapotú molekulák egyensúlyi geometriájának a meghatározására [Császár P., Pulay P., Geometry optimization by direct inversion in the iterative subspace. Journal of Molecular Structure, 114, 31-34 (1984)].

A kvantumkémia új érájának bibliája SCHAEFER és munkatársainak kézikönyve: Y. Yamaguchi, Y. Osamura, J.G. Goddard, H.F. Schaefer: A New Dimension to Quantum Chemistry; Analytic Derivative Methods in Ab Initio Molecular Electronic Structure Theory, Oxford University Press, Oxford (1994). Az első pillantásra elrettentő könyv nagyon sok módszer esetén megadja a szükséges analitikus deriváltakat, így igen hasznos segédeszköz programozó kvantumkémikusok számára.

Kvantitatív kvantumkémiai modellek mellett a kísérleti kémikusok előszeretettel alkal-maznak egyszerűbb kvalitatív modelleket is molekulák szerkezetének a leírására. A vegyértékelektronpár-taszítási (VSEPR, Eng. Valence Shell Electron Pair Repulsion) modellt 1963-ban javasolta Ronald J. GILLESPIE (amerikai-angol kémikus, 1924-) molekulák geomet-riájának az értelmezésére. A VSEPR elmélet a molekulák LEWIS-leírásából indul ki, amely-ben az elektronokat (kötő és nemkötő) párokba rendezzük. A modell alapposztulátuma szerint az elektronpárok elrendeződése a vegyértékhéjban olyan, hogy azok a lehető legtávolabb helyezkednek el egymástól. A legegyszerűbb realizációban az elektronpárokat pontoknak tekintjük az atomtörzset magábafoglaló gömb felületén. A gömb a vegyértékhéjat testesíti meg a modellben. Ez pontosan a “pontok a gömbön” probléma, ami a 10. projekt témája volt!

Feladat: A 10. projekt alapján határozza meg a lehetséges elrendeződéseket 2-6 elektronpár esetén! Mindegyik esetre soroljon fel néhány molekulát, amelyre a kérdéses geometria a jellemző! Vigyázzon: némely esetben több elrendeződés (lokális minimum) is lehetséges! Melyek ezek az esetek?

GILLESPIE könyve [R.J. Gillespie: Molecular Geometry, Van Nostrand, New York (1972)] meghatározó szerepet játszott a modell egyetemi oktatásba való bevezetésében. A Journal of Chemical Education egy kötetet szentelt a modell ünneplésének 2010-ben. L. CARDELLINI egy interjút is készített a szerzővel [L. Cardellini: Modelling Chemistry for Effective Chemical Education: An Interview with Ronald J. Gillespie, J. Chem. Educ., 87, 482 (2010)], amelyből megismerhetjük a modell kialakulásának a körülményeit és a fizikai hátterét.

Állandó elektromos dipólusmomentummal rendelkező, kis, merev molekulák geometriá-jának a meghatározására a mikrohullámú spektroszkópia a legmegfelelőbb kísérleti módszer. A módszer kísérleti hátterével és az eredmények számítógépes kiértékelésével számos kitűnő alapcikk foglalkozik: R.H. Schwendeman, H.N. Volltrauer, V.W. Laurie, E.C. Thomas: Microwave Spectroscopy in the Undergraduate Laboratory, Journal of Chemical Education, 47, 526 (1970); G.F. Pollnow, A.J. Hopfinger: A Computer Experiment in Microwave Spectroscopy, Journal of Chemical Education, 45, 528 (1968).

Page 150: Computational Chemistry

Tasi Gyula: Számítógépes kémia

150

A mikrohullámú spektroszkópiai adatokból nyerhető kísérleti geometria rezgési hozzá-járulást tartalmaz, így eltér a kísérleti re egyensúlyi geometriától. A spektrumból nyerhető legfontosabb szerkezeti paraméterek az A0, B0 és C0 forgási állandók (lásd az 5. projektet). Ezekből a paraméterekből azonban a rezgési-forgási köcsönhatás figyelembevételével közelítő merev-rotátor Ae, Be és Ce forgási állandók állíthatók elő, melyek fordítottan arányosak a főtehetetlenségi momentumokkal:

0

0

0

1;

2

1;

2

1,

2

Ae i i

i

Be i i

i

Ce i i

i

A A n

B B n

C C n

ahol a szumma az összes rezgési módra vonatkozik; ni a rezgési kvantumszám és -k az ún. rezgési-forgási kölcsönhatási konstansok, melyek értékét egyértelműen meghatározza a molekula szerkezete, valamint a molekula harmonikus és köbös erőtere. A kölcsönhatási konstansok elvileg kísérletileg meghatározhatók nagyfelbontású rezgési spektroszkópia segítségével. Többatomos molekulák esetén azonban ez rendkívül bonyolult feladat. Magasszintű számításokkal sokkal könyebb meghatározni őket, így a gyakorlatban ez a megoldás terjedt el.

A független szerkezeti paramétereket a legkisebb négyzetek módszerével (lásd a 11. projektet) ráillesztve a korrigált forgási állandókra egy félempírikus (félelméleti) egyensúlyi molekulageometriát kaphatunk. Természetesen, a független forgási állandók számának nagyobbnak vagy egyenlőnek kell lennie a belső szabadsági fokok számával. A forgási állandók számának növelése érdekében a molekula több izotopomerjére is végrehajthatunk spektroszkópiai vizsgálatot. A bemutatott eljárást P. PULAY, W. MEYER és J.E. BOGGS alkalmazták először többatomos molekulák egyensúlyi geometriájának a meghatározására [P. Pulay, W. Meyer, J.E. Boggs, J. Chem. Phys., 68, 5077 (1978)]. Egy újabb leírása található a módszernek a következő cikkben: W.D. Allen, E. Czinki, A.G. Császár: Molecular Structure of Proline, Chemistry - A European Journal, 10, 4512 (2004). A következőkben a vinil-acetilén-molekula (VA, 1-butén-3-in) példáján bemutatjuk a módszer alkalmazását [G. Tasi, M. Szőri, A.G. Császár: Semispectroscopic and Quantitative Structure-Property Relationship Estimates of the Equilibrium and Vibrationally Averaged Structure and Dipole Moment of 1-Buten-3-yne, Journal of Physical Chemistry A, 109, 4824 (2005)].

A VA a legkisebb molekula konjugált C C kettős és C C hármas kötéssel. Közönsé-ges terméke szénhidrogének pirolízisének, oxidációjának és valószínűleg az űrben is elterjedt szpéciesz. Elektrondiffrakciós, mikrohullámú és rezgési spektroszkópiai módszerekkel tanul-mányozták a szerkezetét.

Planáris molekulageometriát feltételezve, a molekula belső szabadsági fokainak a száma 13. Az atomok számozására az alábbi ábrát készítettük:

Page 151: Computational Chemistry

Tasi Gyula: Számítógépes kémia

151

Sajnos, a molekulának csak 2 izotopomerjére közöltek kísérleti forgási állandókat [Tørneng, E.; Nielsen, C. J.; Klaeboe, P.; Hopf, H.; Priebe, H. Spectrochimica Acta 1980, 36A, 975]. Ez a 6 kísérleti adat nem elégséges az re struktúra meghatározásához: további szerkezeti megkö-tések (feltételek) felállítására van szükség. Az alábbi táblázat a kísérleti alapállapotú forgási állandókat és az MP2/cc-pVTZ szinten korrigált közelítő egyensúlyi forgási állandókat mutatja MHz-ben:

forgási állandók 1-butén-3-in 1-butén-3-in-4d

A0 50308.(55) 49393.(34)

B0 4744.9317(77) 4403.9538(40)

C0 4329.7899(77) 4037.8007(40)

Ae 50493.8574 49559.1928

Be 4756.4640 4413.2089

Ce 4347.1136 4052.4082

A CCSD(T)/aug-cc-pVTZ egyensúlyi geometria alapján a következő szerkezeti megkötéseket állítottuk fel:

r(2,3) r(1,2) = 0.0857 Å (3,2,1) (7,1,2) = 2.69

r(2,3) r(3,5) = 0.2139 Å (7,1,2) (8,1,2) = 0.37

r(1,7) r(1,8) = 0.0008 Å (8,1,2) (9,2,1) = 0.93

r(2,9) r(1,8) = 0.0023 Å (10,5,6) (5,3,4) = 1.06

r(2,9) r(5,10) = 0.0208 Å

Page 152: Computational Chemistry

Tasi Gyula: Számítógépes kémia

152

A VA félempírikus egyensúlyi molekulageometriájának a meghatározására a SemiGeo programot használtuk. A program a simplex-módszert alkalmazza hibaanalízissel kiegészít-ve a súlyozott legkisebb négyzetek módszere alapján történő mellékfeltétel melletti paraméterbecslésre. A számítások a következő szerkezeti paramétereket eredményezték a VA molekulára:

re CCSD(T)/ aug-cc-pVTZ

r(1,2) 1.3382(10) Å 1.3384 Å

r(2,3) 1.4239(7) Å 1.4241 Å

r(3,5) 1.2100(13) Å 1.2102 Å

r(1,7) 1.0796(27) Å 1.0797 Å

r(1,8) 1.0787(23) Å 1.0789 Å

r(2,9) 1.0810(17) Å 1.0811 Å

r(5,10) 1.0602(7) Å 1.0603 Å

(3,2,1) 123.62(7) 123.74

(7,1,2) 120.93(11) 121.05

(8,1,2) 120.55(13) 120.67

(9,2,1) 119.63(16) 119.75

(5,3,4) 88.96(5) 89.22

(10,5,6) 90.02(4) 90.29

Látható, hogy igen jó az egyezés a félempírikus egyensúlyi geometria és a legjobb elméleti geometria között. A korrigált kísérleti egyensúlyi forgási állandókat jól tudtuk illeszteni: a súlyozott reziduális hiba csak 0.014 MHz volt; egyetlenegy eltérés sem volt nagyobb, mint 0.08 MHz, s minden korrelációs koefficiens a [0.91,0.86] intervallumba esett. Az alábbi forráskód s SemiGeo program fontosabb részeit mutatja be:

************************************************************************ program main ************************************************************************ * Program SemiGeo calculates the semiempirical geometry of molecules. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8(a-h,o-z) character title*70 parameter(mat=100,maxiso=20,maxpar=20) common/weight/atm(4,108),abu(4,108),mn(4,108) common/adat1/pi,av,ph common/adat2/natoms,nthres,nat(mat),istpmr(maxiso,mat) common/adat3/zm(3,mat),na(mat),nb(mat),nc(mat)

Page 153: Computational Chemistry

Tasi Gyula: Számítógépes kémia

153

common/adat4/a0(maxiso),b0(maxiso),c0(maxiso),aa(maxiso), & bb(maxiso),cc(maxiso) common/adat5/npar,ntype(maxpar),ip(maxpar),nconst common/adat6/func1,func2,func3,func1a,func1b,func1c,func4 common/adat7/wa(maxiso),wb(maxiso),wc(maxiso),wbl,wba,wta dimension p(maxpar),g(maxpar),coord(3,mat) dimension x(maxpar,maxpar) tomhz=1.0d6*(ph*av)/(8.0d0*pi*pi) ftol=1.0d-14 read(*,'(a70)') title read(*,*) natoms do i=1,natoms read(*,*) nat(i),(zm(j,i),j=1,3),na(i),nb(i),nc(i) end do read(*,*) wbl,wba,wta read(*,*) nthres do i=1,nthres read(*,*) (istpmr(i,j),j=1,natoms) end do do i=1,nthres read(*,*) a0(i),b0(i),c0(i) read(*,*) wa(i),wb(i),wc(i) end do read(*,*) npar do i=1,npar read(*,*) ntype(i),ip(i) end do do i=1,natoms zm(2,i)=zm(2,i)*pi/180.d0 zm(3,i)=zm(3,i)*pi/180.d0 end do do i=1,nthres a0(i)=tomhz/a0(i) b0(i)=tomhz/b0(i) c0(i)=tomhz/c0(i) end do do i=1,npar p(i)=zm(ntype(i),ip(i)) end do cf=fn(p) do i=1,nthres write(*,'(/a,i3)') & 'Experimental rotational constants for isotopomer # ',i write(*,'(3(a4,f13.6,2x)') 'a0= ',a0(i),'b0= ',b0(i),'c0= ', & c0(i) write(*,'(3(a4,f13.6,2x))') 'a0= ',tomhz/a0(i),'b0= ', & tomhz/b0(i),'c0= ',tomhz/c0(i) write(*,'(/a,i3)') & 'Theoretical rotational constants for isotopomer # ',i write(*,'(3(a3,f13.6,2x)') 'a= ',aa(i),'b= ',bb(i),'c= ', & cc(i) write(*,'(3(a3,f13.6,2x))') 'a= ',tomhz/aa(i),'b= ', & tomhz/bb(i),'c= ',tomhz/cc(i) write(*,'(3(a4,f13.6,2x))') 'wa= ',wa(i),'wb= ',wb(i),'wc= ', & wc(i) end do write(*,'(/a,f18.14)') & 'Initial value of the objective function= ',cf write(*,'(5x,a,f18.14)') & 'For rotational constants= ',func1 write(*,'(5x,a1,3(a3,f18.14,2x),a1)') '(','a= ',func1a,'b= ', & func1b,'c= ',func1c,')' write(*,'(5x,a,f18.14)') & 'For bond lengths= ',func2 write(*,'(5x,a,f18.14)') & 'For bond angles= ',func3

Page 154: Computational Chemistry

Tasi Gyula: Számítógépes kémia

154

write(*,'(5x,a,f18.14)') & 'For torsion angles= ',func4 write(*,'(a)') 'Weighing factors:' write(*,'(5x,a,f16.5)') & 'For bond lengths= ',wbl write(*,'(5x,a,f16.5)') & 'For bond angles= ',wba write(*,'(5x,a,f16.5)') & 'For torsion angles= ',wta write(*,'(/a)') '*** Simplex optimization ***' call smplx(p,npar,iter,fopt,ftol,nfeval) cf=fn(p) s2=cf/(3.d0*nthres-npar+nconst) write(*,'(/a,f16.10)') & 'Optimum value of the objective function= ',cf write(*,'(5x,a,f18.14)') & 'For rotational constants= ',func1 write(*,'(5x,a1,3(a3,f18.14,2x),a1)') '(','a= ',func1a,'b= ', & func1b,'c= ',func1c,')' write(*,'(5x,a,f18.14)') & 'For bond lengths= ',func2 write(*,'(5x,a,f18.14)') & 'For bond angles= ',func3 write(*,'(5x,a,f18.14)') & 'For torsion angles= ',func4 write(*,'(a)') 'Weighing factors:' write(*,'(5x,a,f16.5)') & 'For bond lengths= ',wbl write(*,'(5x,a,f16.5)') & 'For bond angles= ',wba write(*,'(5x,a,f16.5)') & 'For torsion angles= ',wta rms=0.d0 do i=1,nthres write(*,'(/a,i3)') & 'Experimental rotational constants for isotopomer # ',i write(*,'(3(a4,f13.6,2x)') 'a0= ',a0(i),'b0= ',b0(i),'c0= ', & c0(i) write(*,'(3(a4,f13.6,2x))') 'a0= ',tomhz/a0(i),'b0= ', & tomhz/b0(i),'c0= ',tomhz/c0(i) write(*,'(/a,i3)') & 'Theoretical rotational constants for isotopomer # ',i write(*,'(3(a3,f13.6,2x)') 'a= ',aa(i),'b= ',bb(i),'c= ', & cc(i) write(*,'(3(a3,f13.6,2x))') 'a= ',tomhz/aa(i),'b= ', & tomhz/bb(i),'c= ',tomhz/cc(i) write(*,'(a20,3f13.6)') 'Differences in MHz: ', & (tomhz/a0(i)-tomhz/aa(i)), & (tomhz/b0(i)-tomhz/bb(i)), & (tomhz/c0(i)-tomhz/cc(i)) rms=rms+(tomhz/a0(i)-tomhz/aa(i))**2+ & (tomhz/b0(i)-tomhz/bb(i))**2+ & (tomhz/c0(i)-tomhz/cc(i))**2 end do rms=dsqrt(rms/(3.d0*nthres-npar+nconst)) do i=1,natoms zm(2,i)=zm(2,i)*180.d0/pi zm(3,i)=zm(3,i)*180.d0/pi end do write(*,'(/a)') 'Semi-theoretical r_e geometry in Z-matrix:' do i=1,natoms write(*,'(i4,3f18.10,3i4)') & nat(i),(zm(j,i),j=1,3),na(i),nb(i),nc(i) end do do i=1,natoms zm(2,i)=zm(2,i)*pi/180.d0

Page 155: Computational Chemistry

Tasi Gyula: Számítógépes kémia

155

zm(3,i)=zm(3,i)*pi/180.d0 end do call ztoc(natoms,zm,coord,na,nb,nc) write(*,'(/a)') 'Semi-theoretical r_e geometry in Angstroms:' do i=1,natoms write(*,'(i4,3f18.10)') nat(i),(coord(j,i),j=1,3) end do write(*,'(/a)') 'Optimized geometry parameters:' call dfnum(p,g) gnorm=dsqrt(dot(g,g,npar,maxpar)) do i=1,npar if(ntype(i).eq.1) then write(*,'(a2,i2,a3,f12.6,5x,a2,i2,a3,f13.8,5x)') & 'p(',i,')= ',p(i),'g(',i,')= ',g(i) else write(*,'(a2,i2,a3,f12.6,5x,a2,i2,a3,f13.8,5x)') & 'p(',i,')= ',p(i)*180.d0/pi,'g(',i,')= ',g(i) endif end do write(*,'(/a,f16.8)') 'Norm of the gradient vector: ',gnorm write(*,'(/a)') '*** Error analysis ***' write(*,'(/a4,f18.8)') 's2= ',s2 write(*,'(/a5,f18.8)') 'rms= ',rms call hessian(p,x) write(*,'(/a/)') & 'Standard deviations of the optimized parameters:' do i=1,npar g(i)=dsqrt(s2*x(i,i)) end do do i=1,npar if(ntype(i).eq.1) then write(*,'(a2,i2,a3,f12.6,5x,a3,f13.8)') & 'p(',i,')= ',p(i),'+- ',g(i) else write(*,'(a2,i2,a3,f12.6,5x,a3,f13.8)') & 'p(',i,')= ',p(i)*180.d0/pi,'+- ',g(i)*180.d0/pi endif end do write(*,'(/a/)') & 'Correlation coefficients:' do i=2,npar do j=1,i-1 e=x(i,j)/dsqrt(dabs(x(i,i)))/dsqrt(dabs(x(j,j))) write(*,'(i3,a1,i3,f16.7)') i,'-',j,e end do end do end ************************************************************************ block data ************************************************************************ implicit real*8(a-h,o-z) common/weight/ atm(4,108),abu(4,108),mn(4,108) common/adat1/ pi,av,ph data pi/3.14159265358979d0/ data av /6.022045d0/ data ph /6.626176d0/ c c Atomic masses and abundances were obtained from the CRC Handbook of c Chemistry and Pysics, 84th edition, 2003 c data atm/ C H-1 H-2 H-3 *ok* $ 1.0078250321D0, 2.0141017780D0, 3.0160492675D0, 0.0d0, C HE-4 HE-3 *ok* $ 4.0026032497D0, 3.0160293097D0, 0.0d0, 0.0d0,

Page 156: Computational Chemistry

Tasi Gyula: Számítógépes kémia

156

C LI-7 LI-6 $ 7.0160045D0, 6.0151232D0, 0.0d0, 0.0d0, C BE-9 $ 9.0121825D0, 0.0d0, 0.0d0, 0.0d0, C B-11 B-10 $ 11.0093053D0, 10.0129380D0, 0.0d0, 0.0d0, C C-12 C-13 C-14 *ok* $ 12.000000000D0, 13.0033548378D0, 14.003241D0, 0.0d0, C N-14 N-15 $ 14.003074008D0, 15.000108978D0, 0.0d0, 0.0d0, C O-16 O-18 O-17 *ok* $ 15.9949146221D0, 17.9991604D0, 16.99913150D0, 0.0d0, C F-19 $ 18.99840325D0, 0.0d0, 0.0d0, 0.0d0, C NE-20 NE-22 NE-21 $ 19.9924391D0, 21.9913837D0, 20.9938453D0, 0.0d0, C NA-23 $ 22.9897697D0, 0.0d0, 0.0d0, 0.0d0, C MG-24 MG-26 MG-25 $ 23.9850450D0, 25.9825954D0, 24.9858392D0, 0.0d0, C AL-27 $ 26.9815413D0, 0.0d0, 0.0d0, 0.0d0, C SI-28 SI-29 SI-30 $ 27.9769284D0, 28.9764964D0, 29.9737717D0, 0.0d0, C P-31 $ 30.9737634D0, 0.0d0, 0.0d0, 0.0d0, C S-32 S-34 S-33 S-36 $ 31.9720718D0, 33.96786774D0, 32.9714591D0, 35.9670790D0, C CL-35 CL-37 *ok* $ 34.96885271D0, 36.96590260D0, 0.0d0, 0.0d0, C AR-40 AR-36 AR-38 $ 39.9623831D0, 35.967545605D0, 37.9627322D0, 0.0, C K-39 K-41 K-40 $ 38.9637079D0, 40.9618254D0, 39.9639988D0, 0.0d0, C CA-40 CA-44 CA-42 CA-48 $ 39.9625907D0, 43.9554848D0, 41.9586218D0, 47.952532D0, C SC-45 $ 44.9559136D0, 0.0d0, 0.0d0, 0.0d0, C TI-48 TI-46 TI-47 TI-49 $ 47.9479467D0, 45.9526327D0, 46.9517649D0, 48.9478705D0, C V-51 V-50 $ 50.9439625D0, 49.9471613D0, 0.0d0, 0.0d0, C CR-52 CR-53 CR-50 CR-54 $ 51.9405097D0, 52.9406510D0, 49.9460463D0, 53.9388822D0, C MN-55 $ 54.9380463D0, 0.0d0, 0.0d0, 0.0d0, C FE-56 FE-54 FE-57 FE-58 $ 55.9349393D0, 53.9396121D0, 56.9353957D0, 57.9332778D0, C CO-59 $ 58.9331978D0, 0.0d0, 0.0d0, 0.0d0, C NI-58 NI-60 NI-62 NI-61 $ 57.9353471D0, 59.9307890D0, 61.9283464D0, 60.9310586D0, C CU-63 CU-65 $ 62.9295992D0, 64.9277924D0, 0.0d0, 0.0d0, C ZN-64 ZN-66 ZN-68 ZN-67 $ 63.9291454D0, 65.9260352D0, 67.9248458D0, 66.9271289D0, C GA-69 GA-71 $ 68.9255809D0, 70.9247006D0, 0.0d0, 0.0d0, C GE-74 GE-72 GE-70 GE-73 $ 73.9211788D0, 71.9220800D0, 69.9242498D0, 72.9234639D0, C AS-75 $ 74.9215955D0, 0.0d0, 0.0d0, 0.0d0, C SE-80 SE-78 SE-82 SE-76 $ 79.9165205D0, 77.9173040D0, 81.916709D0, 75.9192066D0, C BR-79 BR-81 $ 78.9183361D0, 80.916290D0, 0.0d0, 0.0d0,

Page 157: Computational Chemistry

Tasi Gyula: Számítógépes kémia

157

C KR-84 KR-86 KR-82 KR-83 $ 83.9115064D0, 85.910614D0, 81.913483D0, 82.914134D0, C RB-85 $ 84.9117d0, 0.0d0, 0.0d0, 0.0d0, C Sr-88 Sr-84 Sr-86 Sr-87 $ 87.9056d0, 83.9134d0, 85.9094d0, 86.9089d0, C Y-89 $ 88.9054d0, 0.0d0, 0.0d0, 0.0d0, C Zr-90 Zr-91 Zr-92 Zr-94 $ 89.9043d0, 90.9053d0, 91.9046d0, 93.9061d0, C Nb-93 $ 92.9060d0, 0.0d0, 0.0d0, 0.0d0, C Mo-98 Mo-92 Mo-95 Mo-96 $ 97.9055d0, 91.9063d0, 94.90584d0, 95.9046d0, C Tc-99, longest lived isotope $ 98.9063d0, 0.0d0, 0.0d0, 0.0d0, C Ru-102 Ru-99 Ru-100 Ru-104 $ 101.9037d0, 98.9061d0, 99.9030d0, 103.9055d0, C Rh-103 $ 102.9048d0, 0.0d0, 0.0d0, 0.0d0, C Pd-106 Pd-104 Pd-105 Pd-108 $ 105.9032d0, 103.9036d0, 104.9046d0, 107.90389d0, C Ag-107 Ag-109 $ 106.90509d0, 108.9047d0, 0.0d0, 0.0d0, C Cd-114 Cd-110 Cd-111 Cd-112 $ 113.9036d0, 109.9030d0, 110.9042d0, 111.9028d0, C In-115 In-113 $ 114.9041d0, 112.9043d0, 0.0d0, 0.0d0, C Sn-118 Sn-116 Sn-117 Sn-119 $ 117.9018d0, 115.9021d0, 116.9031d0, 118.9034d0, C Sb-121 Sb-123 $ 120.9038d0, 122.9041d0, 0.0d0, 0.0d0, C Te-130 Te-125 Te-126 Te-128 $ 129.9067d0, 124.9044d0, 125.9032d0, 127.9047d0, C I-127 $ 126.9004d0, 0.0d0, 0.0d0, 0.0d0, C Xe-132 Xe-129 Xe-131 Xe-134 $ 131.9042d0, 128.9048d0, 130.9051d0, 133.9054d0, C Cs-134 $ 133.9051d0, 0.0d0, 0.0d0, 0.0d0, C Ba-138 Ba-134 Ba-135 Ba-136 $ 137.9050d0, 133.9043d0, 134.9056d0, 135.9044d0, C La-139 La-138 $ 138.9061d0, 137.9068d0, 0.0d0, 0.0d0, C Ce-140 Ce-138 Ce-142 $ 139.9053d0, 137.9057d0, 141.9090d0, 0.0d0, C Pr-141 $ 140.9074d0, 0.0d0, 0.0d0, 0.0d0, C Nd-142 Nd-143 Nd-144 Nd-146 $ 141.9075d0, 142.9096d0, 143.9099d0, 145.9127d0, C Pm-?? $ 0.0d0, 0.0d0, 0.0d0, 0.0d0, C Sm-152 Sm-147 Sm-149 Sm-154 $ 151.9195d0, 146.9146d0, 148.9169d0, 153.9220d0, C Eu-153 Eu-151 $ 152.9209d0, 150.9196d0, 0.0d0, 0.0d0, C Gd-158 Gd-156 Gd-157 Gd-160 $ 157.9241d0, 155.9221d0, 156.9339d0, 159.9271d0, C Tb-159 Tb-151 $ 158.9250d0, 150.9230d0, 0.0d0, 0.0d0, C Dy-164 Dy-161 Dy-162 Dy-163 $ 163.9288d0, 160.9266d0, 161.9265d0, 162.9284d0, C Ho-165 $ 164.9303d0, 0.0d0, 0.0d0, 0.0d0, C Er-166 Er-167 Er-168 Er-170 $ 165.9304d0, 166.9320d0, 167.9324d0, 169.9355d0,

Page 158: Computational Chemistry

Tasi Gyula: Számítógépes kémia

158

C Tm-169 $ 168.9344d0, 0.0d0, 0.0d0, 0.0d0, C Yb-174 Yb-171 Yb-172 Yb-173 $ 173.9390d0, 170.9365d0, 171.9366d0, 172.9383d0, C Lu-175 $ 174.9409d0, 0.0d0, 0.0d0, 0.0d0, C Hf-180 Hf-177 Hf-178 Hf-179 $ 179.9468d0, 176.9435d0, 177.9439d0, 178.9460d0, C Ta-181 Ta-180 $ 180.9480d0, 179.9415d0, 0.0d0, 0.0d0, C W-184 W-182 W-183 W-186 $ 183.9510d0, 181.9483d0, 182.9503d0, 185.9543d0, C Re-187 Re-185 $ 186.9560d0, 184.9530d0, 0.0d0, 0.0d0, C Os-190 Os-188 Os-189 $ 189.9586d0, 187.9560d0, 188.9586d0, 0.0d0, C Ir-193 Ir-191 $ 192.9633d0, 190.9609d0, 0.0d0, 0.0d0, C Pt-195 Pt-194 Pt-196 Pt-198 $ 194.9648d0, 193.9628d0, 195.9650d0, 197.9675d0, C Au-197 $ 196.9666d0, 0.0d0, 0.0d0, 0.0d0, C Hg-202 Hg-199 Hg-200 Hg-201 $ 201.9706d0, 198.9683d0, 199.9683d0, 200.9703d0, C Tl-205 Tl-203 $ 204.9745d0, 202.9723d0, 0.0d0, 0.0d0, C Pb-208 Pb-204 Pb-206 Pb-207 $ 207.9766d0, 203.9730d0, 205.9745d0, 206.9759d0, C Bi-209 Bi-211 $ 208.9804d0, 210.9873d0, 0.0d0, 0.0d0, C Po-209 Po-206 Po-207 Po-208 $ 208.9825d0, 205.9805d0, 206.9816d0, 207.9813d0, C At-211 $ 210.9875d0, 0.0d0, 0.0d0, 0.0d0, C Rn-222 Rn-210 Rn-211 Rn-212 $ 222.0175d0, 209.9897d0, 210.9906d0, 211.9907d0, C Fr-223 Fr-212 Fr-221 $ 223.0198d0, 211.9960d0, 221.0142d0, 0.0d0, C Ra-226 $ 226.0254d0, 0.0d0, 0.0d0, 0.0d0, C Ac-227 $ 227.0278d0, 0.0d0, 0.0d0, 0.0d0, C Th-232 Th-228 Th-229 Th-230 $ 232.0382d0, 228.0287d0, 229.0316d0, 230.0331d0, C Pa-231 Pa-234 $ 231.0359d0, 234.0430d0, 0.0d0, 0.0d0, C U-238 U-234 U-235 U-236 $ 238.0508d0, 234.0409d0, 235.0439d0, 236.0457d0, C Np-237 Np-236 $ 237.0480d0, 236.0466d0, 0.0d0, 0.0d0, C Pu-242 Pu-239 Pu-240 $ 242.0587d0, 239.0522d0, 240.0540d0, 0.0d0, C Am-243 Am-241 $ 243.0614d0, 241.0567d0, 0.0d0, 0.0d0, C Cm-246 Cm-245 $ 246.0674d0, 245.0653d0, 0.0d0, 0.0d0, C Bk-247 $ 247.0702d0, 0.0d0, 0.0d0, 0.0d0, C Cf-249 Cf-250 $ 249.0748d0, 250.0766d0, 0.0d0, 0.0d0, C Es-252 Es-253 Es-254 $ 252.0829d0, 253.0847d0, 254.0881d0, 0.0d0, C Fm-252 Fm-250 Fm-254 $ 252.0827d0, 250.0795d0, 254.0870d0, 0.0d0, C Md-255 $ 255.0906d0, 0.0d0, 0.0d0, 0.0d0,

Page 159: Computational Chemistry

Tasi Gyula: Számítógépes kémia

159

$ 28*0.0d0/ C data abu/ C H-1 H-2 H-3 *ok* $ 99.9850D0, 0.015D0, 0.D0, 0.0d0, C HE-4 HE-3 *ok* $ 99.999863D0, 0.000137D0, 0.0d0, 0.0d0, C LI-7 LI-6 $ 7.0160045D0, 6.0151232D0, 0.0d0, 0.0d0, C BE-9 $ 9.0121825D0, 0.0d0, 0.0d0, 0.0d0, C B-11 B-10 $ 11.0093053D0, 10.0129380D0, 0.0d0, 0.0d0, C C-12 C-13 C-14 *ok* $ 98.93D0, 1.07D0, 0.0D0, 0.0d0, C N-14 N-15 $ 14.003074008D0, 15.000108978D0, 0.0d0, 0.0d0, C O-16 O-18 O-17 *ok* $ 99.757D0, 0.205D0, 0.038D0, 0.0d0, C F-19 $ 18.99840325D0, 0.0d0, 0.0d0, 0.0d0, C NE-20 NE-22 NE-21 $ 19.9924391D0, 21.9913837D0, 20.9938453D0, 0.0d0, C NA-23 $ 22.9897697D0, 0.0d0, 0.0d0, 0.0d0, C MG-24 MG-26 MG-25 $ 23.9850450D0, 25.9825954D0, 24.9858392D0, 0.0d0, C AL-27 $ 26.9815413D0, 0.0d0, 0.0d0, 0.0d0, C SI-28 SI-29 SI-30 $ 27.9769284D0, 28.9764964D0, 29.9737717D0, 0.0d0, C P-31 $ 30.9737634D0, 0.0d0, 0.0d0, 0.0d0, C S-32 S-34 S-33 S-36 $ 31.9720718D0, 33.96786774D0, 32.9714591D0, 35.9670790D0, C CL-35 CL-37 *ok* $ 75.78D0, 24.22D0, 0.0d0, 0.0d0, C AR-40 AR-36 AR-38 $ 39.9623831D0, 35.967545605D0, 37.9627322D0, 0.0, C K-39 K-41 K-40 $ 38.9637079D0, 40.9618254D0, 39.9639988D0, 0.0d0, C CA-40 CA-44 CA-42 CA-48 $ 39.9625907D0, 43.9554848D0, 41.9586218D0, 47.952532D0, C SC-45 $ 44.9559136D0, 0.0d0, 0.0d0, 0.0d0, C TI-48 TI-46 TI-47 TI-49 $ 47.9479467D0, 45.9526327D0, 46.9517649D0, 48.9478705D0, C V-51 V-50 $ 50.9439625D0, 49.9471613D0, 0.0d0, 0.0d0, C CR-52 CR-53 CR-50 CR-54 $ 51.9405097D0, 52.9406510D0, 49.9460463D0, 53.9388822D0, C MN-55 $ 54.9380463D0, 0.0d0, 0.0d0, 0.0d0, C FE-56 FE-54 FE-57 FE-58 $ 55.9349393D0, 53.9396121D0, 56.9353957D0, 57.9332778D0, C CO-59 $ 58.9331978D0, 0.0d0, 0.0d0, 0.0d0, C NI-58 NI-60 NI-62 NI-61 $ 57.9353471D0, 59.9307890D0, 61.9283464D0, 60.9310586D0, C CU-63 CU-65 $ 62.9295992D0, 64.9277924D0, 0.0d0, 0.0d0, C ZN-64 ZN-66 ZN-68 ZN-67 $ 63.9291454D0, 65.9260352D0, 67.9248458D0, 66.9271289D0, C GA-69 GA-71 $ 68.9255809D0, 70.9247006D0, 0.0d0, 0.0d0, C GE-74 GE-72 GE-70 GE-73

Page 160: Computational Chemistry

Tasi Gyula: Számítógépes kémia

160

$ 73.9211788D0, 71.9220800D0, 69.9242498D0, 72.9234639D0, C AS-75 $ 74.9215955D0, 0.0d0, 0.0d0, 0.0d0, C SE-80 SE-78 SE-82 SE-76 $ 79.9165205D0, 77.9173040D0, 81.916709D0, 75.9192066D0, C BR-79 BR-81 $ 78.9183361D0, 80.916290D0, 0.0d0, 0.0d0, C KR-84 KR-86 KR-82 KR-83 $ 83.9115064D0, 85.910614D0, 81.913483D0, 82.914134D0, C RB-85 $ 84.9117d0, 0.0d0, 0.0d0, 0.0d0, C Sr-88 Sr-84 Sr-86 Sr-87 $ 87.9056d0, 83.9134d0, 85.9094d0, 86.9089d0, C Y-89 $ 88.9054d0, 0.0d0, 0.0d0, 0.0d0, C Zr-90 Zr-91 Zr-92 Zr-94 $ 89.9043d0, 90.9053d0, 91.9046d0, 93.9061d0, C Nb-93 $ 92.9060d0, 0.0d0, 0.0d0, 0.0d0, C Mo-98 Mo-92 Mo-95 Mo-96 $ 97.9055d0, 91.9063d0, 94.90584d0, 95.9046d0, C Tc-99, longest lived isotope $ 98.9063d0, 0.0d0, 0.0d0, 0.0d0, C Ru-102 Ru-99 Ru-100 Ru-104 $ 101.9037d0, 98.9061d0, 99.9030d0, 103.9055d0, C Rh-103 $ 102.9048d0, 0.0d0, 0.0d0, 0.0d0, C Pd-106 Pd-104 Pd-105 Pd-108 $ 105.9032d0, 103.9036d0, 104.9046d0, 107.90389d0, C Ag-107 Ag-109 $ 106.90509d0, 108.9047d0, 0.0d0, 0.0d0, C Cd-114 Cd-110 Cd-111 Cd-112 $ 113.9036d0, 109.9030d0, 110.9042d0, 111.9028d0, C In-115 In-113 $ 114.9041d0, 112.9043d0, 0.0d0, 0.0d0, C Sn-118 Sn-116 Sn-117 Sn-119 $ 117.9018d0, 115.9021d0, 116.9031d0, 118.9034d0, C Sb-121 Sb-123 $ 120.9038d0, 122.9041d0, 0.0d0, 0.0d0, C Te-130 Te-125 Te-126 Te-128 $ 129.9067d0, 124.9044d0, 125.9032d0, 127.9047d0, C I-127 $ 126.9004d0, 0.0d0, 0.0d0, 0.0d0, C Xe-132 Xe-129 Xe-131 Xe-134 $ 131.9042d0, 128.9048d0, 130.9051d0, 133.9054d0, C Cs-134 $ 133.9051d0, 0.0d0, 0.0d0, 0.0d0, C Ba-138 Ba-134 Ba-135 Ba-136 $ 137.9050d0, 133.9043d0, 134.9056d0, 135.9044d0, C La-139 La-138 $ 138.9061d0, 137.9068d0, 0.0d0, 0.0d0, C Ce-140 Ce-138 Ce-142 $ 139.9053d0, 137.9057d0, 141.9090d0, 0.0d0, C Pr-141 $ 140.9074d0, 0.0d0, 0.0d0, 0.0d0, C Nd-142 Nd-143 Nd-144 Nd-146 $ 141.9075d0, 142.9096d0, 143.9099d0, 145.9127d0, C Pm-?? $ 0.0d0, 0.0d0, 0.0d0, 0.0d0, C Sm-152 Sm-147 Sm-149 Sm-154 $ 151.9195d0, 146.9146d0, 148.9169d0, 153.9220d0, C Eu-153 Eu-151 $ 152.9209d0, 150.9196d0, 0.0d0, 0.0d0, C Gd-158 Gd-156 Gd-157 Gd-160 $ 157.9241d0, 155.9221d0, 156.9339d0, 159.9271d0, C Tb-159 Tb-151

Page 161: Computational Chemistry

Tasi Gyula: Számítógépes kémia

161

$ 158.9250d0, 150.9230d0, 0.0d0, 0.0d0, C Dy-164 Dy-161 Dy-162 Dy-163 $ 163.9288d0, 160.9266d0, 161.9265d0, 162.9284d0, C Ho-165 $ 164.9303d0, 0.0d0, 0.0d0, 0.0d0, C Er-166 Er-167 Er-168 Er-170 $ 165.9304d0, 166.9320d0, 167.9324d0, 169.9355d0, C Tm-169 $ 168.9344d0, 0.0d0, 0.0d0, 0.0d0, C Yb-174 Yb-171 Yb-172 Yb-173 $ 173.9390d0, 170.9365d0, 171.9366d0, 172.9383d0, C Lu-175 $ 174.9409d0, 0.0d0, 0.0d0, 0.0d0, C Hf-180 Hf-177 Hf-178 Hf-179 $ 179.9468d0, 176.9435d0, 177.9439d0, 178.9460d0, C Ta-181 Ta-180 $ 180.9480d0, 179.9415d0, 0.0d0, 0.0d0, C W-184 W-182 W-183 W-186 $ 183.9510d0, 181.9483d0, 182.9503d0, 185.9543d0, C Re-187 Re-185 $ 186.9560d0, 184.9530d0, 0.0d0, 0.0d0, C Os-190 Os-188 Os-189 $ 189.9586d0, 187.9560d0, 188.9586d0, 0.0d0, C Ir-193 Ir-191 $ 192.9633d0, 190.9609d0, 0.0d0, 0.0d0, C Pt-195 Pt-194 Pt-196 Pt-198 $ 194.9648d0, 193.9628d0, 195.9650d0, 197.9675d0, C Au-197 $ 196.9666d0, 0.0d0, 0.0d0, 0.0d0, C Hg-202 Hg-199 Hg-200 Hg-201 $ 201.9706d0, 198.9683d0, 199.9683d0, 200.9703d0, C Tl-205 Tl-203 $ 204.9745d0, 202.9723d0, 0.0d0, 0.0d0, C Pb-208 Pb-204 Pb-206 Pb-207 $ 207.9766d0, 203.9730d0, 205.9745d0, 206.9759d0, C Bi-209 Bi-211 $ 208.9804d0, 210.9873d0, 0.0d0, 0.0d0, C Po-209 Po-206 Po-207 Po-208 $ 208.9825d0, 205.9805d0, 206.9816d0, 207.9813d0, C At-211 $ 210.9875d0, 0.0d0, 0.0d0, 0.0d0, C Rn-222 Rn-210 Rn-211 Rn-212 $ 222.0175d0, 209.9897d0, 210.9906d0, 211.9907d0, C Fr-223 Fr-212 Fr-221 $ 223.0198d0, 211.9960d0, 221.0142d0, 0.0d0, C Ra-226 $ 226.0254d0, 0.0d0, 0.0d0, 0.0d0, C Ac-227 $ 227.0278d0, 0.0d0, 0.0d0, 0.0d0, C Th-232 Th-228 Th-229 Th-230 $ 232.0382d0, 228.0287d0, 229.0316d0, 230.0331d0, C Pa-231 Pa-234 $ 231.0359d0, 234.0430d0, 0.0d0, 0.0d0, C U-238 U-234 U-235 U-236 $ 238.0508d0, 234.0409d0, 235.0439d0, 236.0457d0, C Np-237 Np-236 $ 237.0480d0, 236.0466d0, 0.0d0, 0.0d0, C Pu-242 Pu-239 Pu-240 $ 242.0587d0, 239.0522d0, 240.0540d0, 0.0d0, C Am-243 Am-241 $ 243.0614d0, 241.0567d0, 0.0d0, 0.0d0, C Cm-246 Cm-245 $ 246.0674d0, 245.0653d0, 0.0d0, 0.0d0, C Bk-247 $ 247.0702d0, 0.0d0, 0.0d0, 0.0d0, C Cf-249 Cf-250

Page 162: Computational Chemistry

Tasi Gyula: Számítógépes kémia

162

$ 249.0748d0, 250.0766d0, 0.0d0, 0.0d0, C Es-252 Es-253 Es-254 $ 252.0829d0, 253.0847d0, 254.0881d0, 0.0d0, C Fm-252 Fm-250 Fm-254 $ 252.0827d0, 250.0795d0, 254.0870d0, 0.0d0, C Md-255 $ 255.0906d0, 0.0d0, 0.0d0, 0.0d0, $ 28*0.0d0/ data mn/ 1, 2, 3, 0, 4, 3, 0, 0, 7, 6, 0, 0, $ 9, 0, 0, 0, 11, 10, 0, 0, 12, 13, 14, 0, $ 14, 15, 0, 0, 16, 18, 17, 0, 19, 0, 0, 0, $ 20, 22, 21, 0, 23, 0, 0, 0, 24, 26, 25, 0, $ 27, 0, 0, 0, 28, 29, 30, 0, 31, 0, 0, 0, $ 32, 34, 33, 36, 35, 37, 0, 0, 40, 36, 38, 0, $ 39, 41, 40, 0, 40, 44, 42, 48, 45, 0, 0, 0, $ 48, 46, 47, 49, 51, 50, 0, 0, 52, 53, 50, 54, $ 55, 0, 0, 0, 56, 54, 57, 58, 59, 0, 0, 0, $ 58, 60, 62, 61, 63, 65, 0, 0, 64, 66, 68, 67, $ 69, 71, 0, 0, 74, 72, 70, 73, 75, 0, 0, 0, $ 80, 78, 82, 76, 79, 81, 0, 0, 84, 86, 82, 83, $ 85, 0, 0, 0, 88, 84, 86, 87, 89, 0, 0, 0, $ 90, 91, 92, 94, 93, 0, 0, 0, 98, 92, 95, 96, $ 0, 0, 0, 0, 102, 99,100,104, 103, 0, 0, 0, $ 106,104,105,108, 107,109, 0, 0, 114,110,111,112, $ 115,113, 0, 0, 118,116,117,119, 121,123, 0, 0, $ 130,125,126,128, 127, 0, 0, 0, 132,129,131,134, $ 134, 0, 0, 0, 138,134,135,136, 139,138, 0, 0, $ 140,138,142, 0, 141, 0, 0, 0, 142,143,144,146, $ 0, 0, 0, 0, 152,147,149,154, 153,151, 0, 0, $ 158,156,157,160, 159,151, 0, 0, 164,161,162,163, $ 165, 0, 0, 0, 166,167,168,170, 169, 0, 0, 0, $ 174,171,172,173, 175, 0, 0, 0, 180,177,178,179, $ 181,180, 0, 0, 184,182,183,186, 187,185, 0, 0, $ 190,188,189, 0, 193,191, 0, 0, 195,194,196,198, $ 197, 0, 0, 0, 202,199,200,201, 205,203, 0, 0, $ 208,204,206,207, 209,211, 0, 0, 209,206,207,208, $ 211, 0, 0, 0, 222,211,210,212, 223,212,221, 0, $ 226, 0, 0, 0, 227, 0, 0, 0, 232,228,229,230, $ 231,234, 0, 0, 238,234,235,236, 237,236, 0, 0, $ 242,239,240, 0, 243,241, 0, 0, 246,245, 0, 0, $ 247, 0, 0, 0, 249,250, 0, 0, 252,253,254, 0, $ 252,250,254, 0, 255, 0, 0, 0, 28*0/ end ************************************************************************ function fn(p) ************************************************************************ implicit real*8(a-h,o-z) parameter(mat=100,maxiso=20,maxpar=20) common/weight/atm(4,108),abu(4,108),mn(4,108) common/adat1/pi,av,ph common/adat2/natoms,nthres,nat(mat),istpmr(maxiso,mat) common/adat3/zm(3,mat),na(mat),nb(mat),nc(mat) common/adat4/a0(maxiso),b0(maxiso),c0(maxiso),aa(maxiso), & bb(maxiso),cc(maxiso) common/adat5/npar,ntype(maxpar),ip(maxpar),nconst common/adat6/func1,func2,func3,func1a,func1b,func1c,func4 common/adat7/wa(maxiso),wb(maxiso),wc(maxiso),wbl,wba,wta dimension p(maxpar),ind(mat) dimension f(3,3),eig(3),rotm(3,3),coord(3,mat),wt(mat) data eps,iord/1.0d-10,1/ data neig/3/ do i=1,npar zm(ntype(i),ip(i))=p(i) end do call ztoc(natoms,zm,coord,na,nb,nc) func1a=0.d0

Page 163: Computational Chemistry

Tasi Gyula: Számítógépes kémia

163

func1b=0.d0 func1c=0.d0 do i=1,nthres do j=1,natoms ind(j)=istpmr(i,j) if(nat(j).eq.99) then wt(j)=0.d0 else wt(j)=atm(ind(j)+1,nat(j)) endif end do sumwx=0.d0 sumwy=0.d0 sumwz=0.d0 wmol=0.d0 do k=1,natoms wmol=wmol+wt(k) sumwx=sumwx+wt(k)*coord(1,k) sumwy=sumwy+wt(k)*coord(2,k) sumwz=sumwz+wt(k)*coord(3,k) end do cmx=sumwx/wmol cmy=sumwy/wmol cmz=sumwz/wmol do k=1,natoms coord(1,k)=coord(1,k)-cmx coord(2,k)=coord(2,k)-cmy coord(3,k)=coord(3,k)-cmz end do do k=1,3 do j=1,3 f(k,j)=0.d0 end do end do do ii=1,natoms f(1,1)=f(1,1)+wt(ii)*(coord(2,ii)**2+coord(3,ii)**2) f(2,2)=f(2,2)+wt(ii)*(coord(3,ii)**2+coord(1,ii)**2) f(3,3)=f(3,3)+wt(ii)*(coord(1,ii)**2+coord(2,ii)**2) f(2,1)=f(2,1)-wt(ii)*coord(1,ii)*coord(2,ii) f(3,1)=f(3,1)-wt(ii)*coord(1,ii)*coord(3,ii) f(3,2)=f(3,2)-wt(ii)*coord(2,ii)*coord(3,ii) end do f(1,2)=f(2,1) f(1,3)=f(3,1) f(2,3)=f(3,2) call jacobi(f,neig,eig,rotm,eps,iord) aa(i)=eig(1) bb(i)=eig(2) cc(i)=eig(3) func1a=func1a+wa(i)*(aa(i)-a0(i))**2 func1b=func1b+wb(i)*(bb(i)-b0(i))**2 func1c=func1c+wc(i)*(cc(i)-c0(i))**2 end do c c ccsd(t)/aug-cc-pVTZ constraints c nconst=9 b1=1.424074d0-1.338397d0 b2=1.424074d0-1.210215d0 b3=1.079717d0-1.078872d0 b4=1.081125d0-1.078872d0 b5=1.060293d0-1.081125d0 a1=(121.0474d0-120.6743d0)*pi/180.d0 a2=(119.7459d0-120.6743d0)*pi/180.d0 a3=(123.7369d0-121.0474d0)*pi/180.d0 a4=(90.28595d0-89.2242d0)*pi/180.d0

Page 164: Computational Chemistry

Tasi Gyula: Számítógépes kémia

164

sum2=(zm(1,3)-zm(1,2)-b1)**2+(zm(1,3)-zm(1,5)-b2)**2+ & (zm(1,7)-zm(1,8)-b3)**2+(zm(1,9)-zm(1,8)-b4)**2+ & (zm(1,10)-zm(1,9)-b5)**2 sum3=(zm(2,7)-zm(2,8)-a1)**2+(zm(2,9)-zm(2,8)-a2)**2+ & (zm(2,3)-zm(2,7)-a3)**2+(zm(2,10)-zm(2,5)-a4)**2 c sum4=0.d0 c func1=func1a+func1b+func1c func2=wbl*sum2 func3=wba*sum3 func4=wta*sum4 fn=func1+func2+func3+func4 return end

A VA molekulára végzett számítás outputjának egy része: Experimental rotational constants for isotopomer # 1 a0= 10.008723 b0= 106.250997 c0= 116.256231 a0= 50493.857380 b0= 4756.464049 c0= 4347.113624 Theoretical rotational constants for isotopomer # 1 a= 10.008714 b= 106.249257 c= 116.257971 a= 50493.902004 b= 4756.541931 c= 4347.048549 wa= 200.000000 wb= 1.000000 wc= 1.000000 Experimental rotational constants for isotopomer # 2 a0= 10.197483 b0= 114.515098 c0= 124.710795 a0= 49559.192780 b0= 4413.208851 c0= 4052.408179 Theoretical rotational constants for isotopomer # 2 a= 10.197479 b= 114.514206 c= 124.711685 a= 49559.214163 b= 4413.243229 c= 4052.379249 wa= 200.000000 wb= 1.000000 wc= 1.000000 Initial value of the objective function= 0.00000766391987 For rotational constants= 0.00000766335070 (a= 0.00000001951884 b= 0.00000382232593 c= 0.00000382150593 ) For bond lengths= 0.00000000042989 For bond angles= 0.00000000013927 For torsion angles= 0.00000000000000 Weighing factors: For bond lengths= 1.00000 For bond angles= 1.00000 For torsion angles= 1.00000 *** Simplex optimization *** Iteration # 0 0.000007663920 7.422144588270 contraction Iteration # 1 0.000007663920 2.795762854004 reflection Iteration # 2 0.000007663920 2.723359249461 contraction Iteration # 3 0.000007663920 2.291162062116 reflection Iteration # 4 0.000007663920 2.153838280392 contraction Iteration # 5 0.000007663920 1.628999189744 contraction Iteration # 6 0.000007663920 1.187393945176 contraction Iteration # 7 0.000007663920 0.775760227494 reflection Iteration # 8 0.000007663920 0.737882436861 contraction Iteration # 9 0.000007663920 0.608750268875 contraction Iteration # 10 0.000007663920 0.491815475900 contraction Iteration # 11 0.000007663920 0.369251987634 contraction

Page 165: Computational Chemistry

Tasi Gyula: Számítógépes kémia

165

Iteration # 12 0.000007663920 0.232773009142 reflection Iteration # 13 0.000007663920 0.225481908692 contraction Iteration # 14 0.000007663920 0.199745111866 contraction Iteration # 15 0.000007663920 0.171394004202 contraction Iteration # 16 0.000007663920 0.148394275010 contraction Iteration # 17 0.000007663920 0.125096913992 contraction Iteration # 18 0.000007663920 0.102593848958 contraction Iteration # 19 0.000007663920 0.084729503074 contraction Iteration # 20 0.000007663920 0.068580843542 contraction Iteration # 21 0.000007663920 0.060104866333 contraction Iteration # 22 0.000007663920 0.053862996106 contraction Iteration # 23 0.000007663920 0.049052741271 contraction Iteration # 24 0.000007663920 0.044697986474 contraction Iteration # 25 0.000007663920 0.039467691357 contraction Iteration # 26 0.000007663920 0.034248990959 contraction Iteration # 27 0.000007663920 0.028693257167 reflection Iteration # 28 0.000007663920 0.027767703112 contraction Iteration # 29 0.000007663920 0.024832029195 contraction Iteration # 30 0.000007663920 0.021828326562 contraction contraction ... Iteration # 1368 0.000007663444 0.000000000000 reflection Iteration # 1369 0.000007663444 0.000000000000 contraction Iteration # 1370 0.000007663444 0.000000000000 reflection Iteration # 1371 0.000007663444 0.000000000000 reflection Iteration # 1372 0.000007663444 0.000000000000 reflection Iteration # 1373 0.000007663444 0.000000000000 contraction Iteration # 1374 0.000007663444 0.000000000000 reflection Iteration # 1375 0.000007663444 0.000000000000 contraction Iteration # 1376 0.000007663444 0.000000000000 contraction Iteration # 1377 0.000007663444 0.000000000000 reflection Iteration # 1378 0.000007663444 0.000000000000 reflection Iteration # 1379 0.000007663444 0.000000000000 reflection Iteration # 1380 0.000007663444 0.000000000000 contraction Iteration # 1381 0.000007663444 0.000000000000 reflection Iteration # 1382 0.000007663444 0.000000000000 expansion Iteration # 1383 0.000007663444 0.000000000000 reflection Iteration # 1384 0.000007663444 0.000000000000 contraction

Page 166: Computational Chemistry

Tasi Gyula: Számítógépes kémia

166

Iteration # 1385 0.000007663444 0.000000000000 reflection Iteration # 1386 0.000007663444 0.000000000000 contraction Iteration # 1387 0.000007663444 0.000000000000 reflection Iteration # 1388 0.000007663444 0.000000000000 contraction Iteration # 1389 0.000007663444 0.000000000000 Optimum value of the objective function= 0.0000076634 For rotational constants= 0.00000766334539 (a= 0.00000001900709 b= 0.00000382159505 c= 0.00000382274325 ) For bond lengths= 0.00000000009402 For bond angles= 0.00000000000459 For torsion angles= 0.00000000000000 Weighing factors: For bond lengths= 1.00000 For bond angles= 1.00000 For torsion angles= 1.00000 Experimental rotational constants for isotopomer # 1 a0= 10.008723 b0= 106.250997 c0= 116.256231 a0= 50493.857380 b0= 4756.464049 c0= 4347.113624 Theoretical rotational constants for isotopomer # 1 a= 10.008715 b= 106.249257 c= 116.257972 a= 50493.901102 b= 4756.541929 c= 4347.048541 Differences in MHz: -0.043722 -0.077880 0.065083 Experimental rotational constants for isotopomer # 2 a0= 10.197483 b0= 114.515098 c0= 124.710795 a0= 49559.192780 b0= 4413.208851 c0= 4052.408179 Theoretical rotational constants for isotopomer # 2 a= 10.197479 b= 114.514207 c= 124.711686 a= 49559.214476 b= 4413.243215 c= 4052.379239 Differences in MHz: -0.021696 -0.034364 0.028940 Semi-theoretical r_e geometry in z-matrix: 6 0.0000000000 0.0000000000 0.0000000000 0 0 0 6 1.3381855718 0.0000000000 0.0000000000 1 0 0 6 1.4238692628 123.6156306620 0.0000000000 2 1 0 99 1.0000000000 90.0000000000 180.0000000000 3 2 1 6 1.2100146811 88.9619310111 180.0000000000 3 4 2 99 1.0000000000 90.0000000000 0.0000000000 5 3 4 1 1.0795776827 120.9261563942 0.0000000000 1 2 3 1 1.0787335770 120.5530757722 180.0000000000 1 2 3 1 1.0809874181 119.6247103543 0.0000000000 2 1 8 1 1.0601607305 90.0237943034 180.0000000000 5 6 3 Semi-theoretical r_e geometry in angstroms: 6 0.0000000000 0.0000000000 0.0000000000 6 1.3381855718 0.0000000000 0.0000000000 6 2.1264663003 1.1857559490 0.0000000000 99 2.9592365412 0.6321371940 0.0000000000 6 2.8144987599 2.1811186281 0.0000000000 99 3.6371025636 1.6125036598 0.0000000000 1 -0.5548305089 0.9260945305 0.0000000000 1 -0.5483594489 -0.9289607339 0.0000000000 1 1.8725358281 -0.9396827133 0.0000000000 1 3.4169597979 3.0534611481 0.0000000000 Optimized geometry parameters: p( 1)= 1.338186 g( 1)= 0.00004971 p( 2)= 1.423869 g( 2)= -0.00001905 p( 3)= 1.210015 g( 3)= -0.00000536 p( 4)= 1.079578 g( 4)= 0.00002746 p( 5)= 1.078734 g( 5)= -0.00000235 p( 6)= 1.080987 g( 6)= 0.00002190 p( 7)= 1.060161 g( 7)= -0.00000172 p( 8)= 123.615631 g( 8)= -0.00013336 p( 9)= 88.961931 g( 9)= 0.00007758

Page 167: Computational Chemistry

Tasi Gyula: Számítógépes kémia

167

p(10)= 120.926156 g(10)= 0.00000412 p(11)= 120.553076 g(11)= -0.00000062 p(12)= 119.624710 g(12)= 0.00000876 p(13)= 90.023794 g(13)= 0.00001355 Norm of the gradient vector: 0.00016789 *** Error analysis *** s2= 0.00000383 rms= 0.08573758 Eigenvalues and eigenvectors of the hessian root no. 1 2 3 4 5 0.17484D 0.49503D 0.16393D 0.28877D 0.31670D 1 0.00954 -0.05054 -0.53997 -0.08572 -0.26512 2 -0.08085 -0.01950 0.05224 -0.09760 0.03945 3 -0.15750 -0.06628 0.59329 0.14841 0.17385 4 0.46200 0.47946 0.29623 0.07825 -0.56888 5 0.38644 0.41176 0.08230 -0.18023 0.28273 6 0.27239 0.22838 -0.19543 -0.16108 0.66451 7 0.09619 0.04532 -0.28732 -0.07401 -0.06572 8 0.21255 0.11250 -0.18179 0.14951 -0.00011 9 -0.00778 0.01328 0.13535 0.37581 0.19675 10 0.32510 -0.17124 -0.12434 0.60678 0.07664 11 0.40591 -0.41352 0.04596 0.18718 0.03152 12 0.45197 -0.56281 0.18903 -0.47864 -0.05380 13 -0.04870 0.09546 0.18378 -0.30851 -0.00287 root no. 6 7 8 9 10 0.40008D 0.55775D 0.62085D 0.67007D 0.64942D 1 -0.01020 -0.37978 -0.12925 0.05770 -0.19731 2 0.00914 0.70688 0.05048 -0.16583 -0.13128 3 -0.05576 -0.46235 0.00848 0.09707 0.26431 4 0.03157 0.06661 0.24621 0.16691 -0.00486 5 -0.03685 -0.08216 -0.64776 -0.36140 -0.03192 6 -0.03882 -0.02953 0.45643 0.30677 -0.03144 7 0.02590 0.13430 -0.00695 -0.01713 0.92111 8 0.32893 -0.16158 0.08225 0.15433 -0.12886 9 0.58137 0.17019 -0.08517 0.03788 -0.02338 10 -0.32647 -0.05440 0.26446 -0.54138 -0.00817 11 -0.32667 0.20836 -0.37894 0.57316 -0.01474 12 0.33226 -0.10270 0.17324 -0.24156 -0.00113 13 -0.47149 0.01535 0.18580 -0.04081 -0.07784 root no. 11 12 13 0.17124D 0.84544D 0.22255D 1 0.07207 0.43638 -0.47878 2 -0.09120 0.65064 -0.02396 3 -0.07901 0.50948 -0.06720 4 -0.12295 0.02030 -0.17237 5 -0.00342 0.05071 0.00326 6 -0.16612 0.03096 -0.18323 7 0.14616 0.08489 -0.01668 8 0.36012 0.32050 0.68766 9 0.44109 -0.10396 -0.46899 10 0.01982 0.03671 -0.03302 11 0.05708 0.01904 -0.00598 12 0.00760 -0.01320 -0.04121 13 0.76695 -0.01008 -0.08036

Page 168: Computational Chemistry

Tasi Gyula: Számítógépes kémia

168

Standard deviations of the optimized parameters: p( 1)= 1.338186 + 0.00095493 p( 2)= 1.423869 + 0.00072732 p( 3)= 1.210015 + 0.00127505 p( 4)= 1.079578 + 0.00266826 p( 5)= 1.078734 + 0.00225396 p( 6)= 1.080987 + 0.00169494 p( 7)= 1.060161 + 0.00069850 p( 8)= 123.615631 + 0.06627889 p( 9)= 88.961931 + 0.04558653 p(10)= 120.926156 + 0.10549144 p(11)= 120.553076 + 0.13308835 p(12)= 119.624710 + 0.15674852 p(13)= 90.023794 + 0.04350716 Correlation coefficients: 2- 1 -0.3878484 3- 1 -0.5814246 3- 2 0.1237743 4- 1 -0.1268763 4- 2 -0.4469495 4- 3 -0.4545000 5- 1 -0.0894252 5- 2 -0.4427996 5- 3 -0.4881429 5- 4 0.8557605 6- 1 0.0008076 6- 2 -0.4197003 6- 3 -0.5504838 6- 4 0.6838309 6- 5 0.7905595 7- 1 0.5228054 7- 2 -0.2883702 7- 3 -0.9128936 7- 4 0.5281229 7- 5 0.5685385 7- 6 0.6230660 8- 1 0.2285206 8- 2 -0.6210929 8- 3 -0.6603061 8- 4 0.8060851 8- 5 0.7750252 8- 6 0.7950534 8- 7 0.7184252 9- 1 -0.4271829 9- 2 0.1206160 9- 3 0.2351376 9- 4 -0.0081632 9- 5 -0.0133756 9- 6 -0.0377724 9- 7 -0.2247550 9- 8 0.1731256 10- 1 0.1005627 10- 2 -0.4555143 10- 3 -0.4537617 10- 4 0.5203635 10- 5 0.5025248 10- 6 0.5189363 10- 7 0.4927926 10- 8 0.6608426 10- 9 -0.0034727 11- 1 0.0700693 11- 2 -0.3798766 11- 3 -0.3717244 11- 4 0.4197059 11- 5 0.4063139 11- 6 0.4211047 11- 7 0.4100954 11- 8 0.5411683 11- 9 -0.0654224 11- 10 0.8032861

Page 169: Computational Chemistry

Tasi Gyula: Számítógépes kémia

169

12- 1 0.0572343 12- 2 -0.3277099 12- 3 -0.3189066 12- 4 0.3581277 12- 5 0.3472115 12- 6 0.3605634 12- 7 0.3558597 12- 8 0.4877398 12- 9 -0.0770995 12- 10 0.6995911 12- 11 0.8628183 13- 1 -0.3542735 13- 2 0.2646451 13- 3 0.3398837 13- 4 -0.0162532 13- 5 -0.0292277 13- 6 -0.0641747 13- 7 -0.3289488 13- 8 -0.4788868 13- 9 -0.5660209 13- 10 -0.4187002 13- 11 -0.3978943 13- 12 -0.3592840

Egy molekula szerkezetének a meghatározása általában a következő szintekre bontható: kémiai összetétel (1D), konstitúció (2D), konfiguráció és konformáció (3D) (MK: 1-6.3).

kémiai összetétel

konsti

túció

konf

igur

áció

, kon

form

áció

OHCH3

OH

OH OH

CH3 H3C

H H

HO

H

H3C

H

HO

H3C

H

HO

H3C

C7H13OH

2-metil-ciklohexanol

2-hidroxi,3-metil-ciklohexén

konfigurációs térkonformációs

tér

kémiai összetétel

konsti

túció

konf

igur

áció

, kon

form

áció

OHCH3

OH

OH OH

CH3 H3C

H H

HO

H

H3C

H

HO

H3C

H

HO

H3C

C7H13OH

2-metil-ciklohexanol

2-hidroxi,3-metil-ciklohexén

konfigurációs térkonformációs

tér

Amíg az 1- és 2-dimenziós szerkezetek sztatikusak, addig a 3D-s konfiguráció és konformáció többnyire dinamikus jellemzői egy adott molekulának. A konformáció dinami-kus jellege folytán gyakran előfordul, hogy egy adott konformáció optikailag aktív, ami indokolttá teszi a konformációs kiralitás fogalmának a bevezetését. Ebből következően az utóbbi két fogalom inkább mellérendelt, mintsem alá-, vagy fölérendelt viszonyban áll egymással.

A XIX. század végén VAN’T HOFF és LE BELL a tetraéderes szénatom fogalmának beveze-tésével a kémia egy új ágának, a sztereokémiának a fejlődését indította útjára. A sztereokémia egyik alapvető feladata, hogy számot adjon a molekulák szerkezeti, konfigurációs és konformációs izomereiről. A tudományág megszületése óta a szerkezeti izomerek össze-számlálásával foglalkozó tanulmányokban az alifás alkánok a leggyakoribb célpontok. Az 1930-as években George (György) PÓLYA kidolgozott egy általános kombinatorikus

Page 170: Computational Chemistry

Tasi Gyula: Számítógépes kémia

170

elméletet, amelyet később módosított, illetve mások továbbfejlesztettek. Az n-alkán moleku-lák flexibilis szénláncát szemlélve magától értetődő módon vetődik fel a kérdés: mennyi a lehetséges konformerek száma és milyen ezek szerkezete? További fontos kérdések: (1) mi a konformerek relatív stabilitási sorrendje és (2) hogyan transzformálódnak egymásba? Ezen kérdések megválaszolása után az n-alkánok makroszkopikus fizikai és kémiai tulajdonságai a statisztikus mechanika segítségével meghatározhatók a konformerek együtteséből. Az n-alkánok konformációs összeszámlálási feladata nem oldható meg csupán absztrakt matema-tikai módszerekkel, sőt a jelenlegi kísérleti technikák sem tudnak dönteni ebben a kérdésben. Jelenleg a legjobb megoldásnak az tűnik, ha összekapcsoljuk az elméleti kémiai alkalmazá-sokat az absztrakt matematikai eszközökkel.

A hagyományos kvantumkémiai eljárás szerint egy adott molekula különböző konformerei a konformációs potenciális energiafelület lokális minimumához kapcsolódnak, amelyet a nemrelativisztikus, időfüggetlen SCHRÖDINGER-egyenlet közelítő megoldásából származtatunk a BORN-OPPENHEIMER közelítésen belül. Ami a konformációs PES nyeregpontjait illeti, legfontosabbak az elsőrendű nyeregpontok (átmeneti állapotok), melyek a konformereket kapcsolják össze. Ennélfogva a konformációs PES (CPES) topológiája meghatározza egy molekula konformációs tulajdonságait.

A következő ábrán a n-bután jól ismert konformációs energiadiagramját láthatjuk:

C1-C2-C3-C4

0º 60º 120º 180º 240º 300º 360º

E[kc

al/m

ól]

0

1

2

3

4

5

6

7

p

g-g+

t

p

C1-C2-C3-C4

0º 60º 120º 180º 240º 300º 360º

E[kc

al/m

ól]

0

1

2

3

4

5

6

7

p

g-g+

t

p

A n-bután konformerjei a CCCC torziós szög alapján: transz (t, 180°) és gauche (g+,+60°, g, 60°). A nemekvivalens (nemizomorf) konformerek száma 2. Az n-bután konformációs viszonyait szokás kiterjeszteni a magasabb homológok CPES-ének leírására is. Az indukciós következtetéshez azt is hozzáveszik, hogy az “all-trans” konformer globális minimum a potenciális energiafelületen. A kombinatorikus összeszámlálási tanulmányokban általában feltételezték, hogy a lehetséges n-alkán izomerek beágyazhatók a gyémánt kristályrácsába. Másképp fogalmazva, csak olyan konformerek létezésével számoltak, melyekben előforduló torziós szögek megtalálhatók a gyémántrácsban. Ha kizárólag a n-bután esetén megismert 1-4 kölcsönhatások játszanának szerepet a konformációk kialakításában, akkor a φ: K Ln (L={t, g+, g-}, K a konformerek halmaza, n a molekulában lévő, szabadon rotálható CCCC torziós szögek száma) leképezés bijektív lenne, és a konformerek számára 3n–t kapnánk.

Page 171: Computational Chemistry

Tasi Gyula: Számítógépes kémia

171

A C4-C8 n-alkánokra teljes konformációs analízist végeztünk SEOEM, HF/6-31G* és MP2/6-31G* szinteken (lásd a 4. és a 14. projekteket) [G. Tasi, F. Mizukami: Scaled Effective One-Electron Method Based on G2 Theory: Results for Alphatic Alkane Molecules, J. Chem. Inf. Comput. Sci., 38, 632 (1998); G. Tasi et al.: Enumeration of the Conformers of Unbranched Aliphatic Alkanes, J. Phys. Chem. A, 102, 7698 (1998)]. A kiindulási geometriákat Monte-Carlo módszerrel (lásd a 13. projektet) generáltuk: a szabad CCCC torziós szögeket véletlenszerűen választottuk a [0-2π) intervallumból. A kiindulási geometriák számát lépésenként növeltük néhány ezerig, amíg a kapott lokális minimumok száma tovább már nem növekedett. Minden stacionárius pontra harmonikus rezgési analízist végeztünk. Egy bizonyos kiindulási geometriaszám elérése után a kezdeti geometriák számának további növelésével már csak az átmeneti állapotok száma növekedett. A C4-C8 molekulákra rendre 11, 35, 107 és 339 konformer adódott.

Az alábbi ábra a n-pentán SEOEM CPES-ét mutatja. Az ábrán a konformereket összekötő minimális energiájú reakcióutakat is feltüntettük.

Page 172: Computational Chemistry

Tasi Gyula: Számítógépes kémia

172

A kédéses CPES-en 11 lokális minimum, 20 átmeneti állapot és 9 lokális maximum található. A CPES ugyanolyan szimmetriával rendelkezik, mint a globális minimumnak megfelelő konformer (C2v). A CPES előállításához több mint 10 ezer geometriai optimalizálást kell végrehajtani. Az is megfigyelhető, hogy kétféle gauche torziós szög létezik: egy ± 60º-nál és egy másik ± 95º-nál. Jelöljük a különböző torziós szögeket következőképpen: t ~ 180º, g+~ +60º, g-~ -60º, x+~ +95º és x-~ 95º. Csak a nemizomorf, vagy más néven spektroszkópiai izomer konformernek totális energiája különböző. Az izomorf konfomerek energiáira a következő összefüggések állnak fenn: tg+ = tg- = g+t = g-t, g+g+ = g-g- és x-g+ = x+g- = g+x- = g-x+. Azaz a n-pentán konformációs terét a tt konformációval együtt négy ekvivalencia osztályba lehet sorolni. Az ekvivalens konformerek energiája megegyezik. Megjegyezzük, hogy a g+x- és az x-g+ konformerek közötti átmeneti állapothoz a g+g- geometriával rendelkező molekulát szokták általában hozzárendelni. Ez azonban nem helyes, ugyanis az átmeneti állapotban a torziósszögek +75º és 75º-osak, amelyek lényegesen eltérnek a konformerek torziósszögeitől (g+x-: +60º, 95º; x+g-: +95º, 60º). Az átmeneti állapothoz tartozó geometria a Cs pontcsoportba tartozik. Ugyanez érvényes a g-x+ és az x+g- konformerek közötti átmeneti állapotra is.

A bemutatott eredményekből egyértelműen megállapítható, hogy a konformerek számára a 3n szabály egy alsó, míg az 5n szabály egy felső becslést ad, ugyanis az L halmaz számossága megváltozott (L={t, g+, g-, x+, x-}).

A C5-C7 n-alkánokra végrehajtott konformációs analízisek eredményei alapján néhány egyszerű szabály állítható fel a lehetséges konformerek szekvenciáira: I. a következő kéttagú szekvenciák sohasem fordulnak elő konformerekben:

I.a. g+g-, g-g+ I.b. x+x-, x-x+.

II. a g+x-g+, g-x+g-, x+g+x-, x-g+x+, x+g-x- és x-g-x+ sztringek szintén tiltottak. III. a következő négyes szekvenciák sem fordulnak elő: x+g-g-x+ és x-g+g+x-. IV. Adódott egy olyan szabály is, amely egy szükséges feltételt fogalmaz meg: az x+

torziós szög mellett mindig kell lennie g- torziós szögnek, azaz ...x+g-..., vagy ... g-x+...; ugyanígy az x- g+-t igényel, vagyis ...x-g+..., vagy ... g+x-...

Ezeknek a szabályoknak az alkalmazásával pontosan reprodukálható az összes létező C5-C7 n-alkán-konformer szekvenciája.

Felmerül a kérdés, vajon a fent említett szabályokat lehet-e alkalmazni hosszabb n-alkánokra; igazak maradnak-e a kis szénatom számra levezetett következtetések? Az alábbi táblázatban láthatjuk a C8-C12 normál alkánokra kapott eredményeket, melyekhez a követke-ző számításokat végeztük: oktánra, nonánra, dekánra és undekánra a kezdeti geometriákat háromféle módon állítottuk elő a SEOEM számításokhoz:

i. Monte-Carlo módszerrel 10000-200000 közötti kiindulási struktúrát hoztunk létre; ii. az 5n felső határ szerinti összes konformációt előállítottuk;

iii. az (I-IV) szabályok alkalmazásával építettük fel a kiindulási geometriákat.

Page 173: Computational Chemistry

Tasi Gyula: Számítógépes kémia

173

n-alkán n 3n 5n (I)-(IV)

szabályok Talált

konformerek

oktán 5 243 3125 339 (95) 339 (95)

nonán 6 729 15625 1073 (279) 1073 (279)

dekán 7 2187 78125 3375 (876) 3375 (876)

undekán 8 6561 390625 10633 (2691) 10633 (2691)

dodekán 9 19683 1953125 33525 (8481)

A három eljárással ugyanazt az eredményt kaptuk, mind a konformerek számának, mind pedig a szekvenciák tekintetében (lásd a táblázat utolsó oszlopát). Ezek alapján azt mondhat-juk, hogy a felállított (I-IV) szabályok nagy valószínűséggel általános érvényűek hosszabb szénláncú normál alkánok esetében is. Megállapítható volt, hogy az n-alkánok konforme-reinek számát, és szekvenciáját az 1-4, 1-5, 1-6, és 1-7 helyzetű szénatomokhoz kapcsolódó hidrogénatomok között fellépő másodlagos (VAN DER WAALS) taszító és vonzó kölcsön-hatások határozzák meg.

Az lehetséges konformerek ismeretében, kvantumkémiai számítások alapján felhasz-nálva a megfelelő statisztikus termodinamikai formulákat lehetőségünk nyílik a termodina-mikai mennyiségek meghatározására. Az xi konformer gázfázisú populációját MAXWELL-BOLTZMANN-féle eloszlást feltételezve (MK: 2-4.) első közelítésben következőképpen számíthatjuk:

j

kT

E

kT

E

ij

i

e

ex ,

ahol ∆Ei az i-edik konformer és a globális minimum energiája közötti különbség. A képző-déshőket ezek után következőképpen számíthatjuk:

i

jfif HxH 298,

298 .

Az alábbi táblázatban a SEOEM módszerrel számított és a kísérleti képződéshőket mutatjuk be néhány normál alkán molekulára.

Page 174: Computational Chemistry

Tasi Gyula: Számítógépes kémia

174

n-alkán Kísérleti érték [kJ/mol] Számított érték [kJ/mol]

pentán -146.9 -146.8

hexán -167.1 -167.0

heptán -187.7 -187.4

oktán -208.6 -207.8

nonán -228.2 -228.2

dekán -249.5 -248.7

undekán -270.9 -269.8

Láthatjuk, hogy az egyezés az elmélet és a kísérlet között kiváló. További számítási eredmények találhatók a következő cikkekben: Vansteenkiste, P.,

Pauwels, E., Van Speybroeck, V., Waroquier, M.: Rules for Generating Conformers and Their Relative Energies in n-Alkanes with a Heteroelement O or S: Ethers and Alcohols, or Sulfides and Thiols, Journal of Physical Chemistry A, 109, 9617-9626 (2005); G. Tasi, R. Izsák, G. Matisz, A.G. Császár, M. Kállay, B. Ruscic, J.F. Stanton: The Origin of Systematic Error in the Standard Enthalpies of Formation of Hydrocarbons Computed via Atomization Schemes, ChemPhysChem, 7, 1664-1667 (2006); Bakowies, D.: Ab Initio Thermochemistry with High-Level Isodesmic Corrections: Validation of the ATOMIC Protocol for a Large Set of Compounds with First-Row Atoms (H, C, N, O, F), Journal of Physical Chemistry A, 113, 11517–11534 (2009); Gruzman, D., Karton, A., Martin J.M.L.: Performance of ab initio and density functional methods for conformational equilibria of CnH2n+2 alkane isomers (n=4-8), Journal of Physical Chemistry A, 113, 11974–11983 (2009). Ezekben a cikkekben fel-használják, és további molekulacsaládokra kiterjesztik az előzőekben bemutatott konformá-ciós szabályokat.

Normál alkánok esetén a konformerek lehetséges számára kombinatórikai és gráfelmé-leti megfontolások alapján sikerült egy lineáris rekurziós egyenletrendszert felállítani [G. Tasi, F. Mizukami, Quantum algebraic–combinatoric study of the conformational properties of n-alkanes. I, Journal of Mathematical Chemistry, 25, 55-64 (1999); G. Tasi, F. Mizukami, J. Csontos, W. Győrffy, I. Pálinkó: Quantum algebraic–combinatoric study of the conformational properties of n-alkanes. II, Journal of Mathematical Chemistry, 27, 191-199 (2000)]. A következő kis C nyelvű program a szabad CCCC torziós szögek számának a függvényében írja ki a lehetséges konformerek számát:

Page 175: Computational Chemistry

Tasi Gyula: Számítógépes kémia

175

# include <stdio.h> # define MAXN 60 /* maximum dimension */ # define N 40 /* number of the C-C-C-C torsional angles considered */ main() {

double a[MAXN], b[MAXN], c[MAXN], d[MAXN]; int i, j;

for (j = 1; j <= N; ++j) {

a[0] = 1.0; b[0] = c[0] = d[0] = 0.0; for (i = 1; i <= j; ++i) {

a[i] = a[i-1] + b[i-1] + d[i-1]; b[i] = 2 * a[i-1] + b[i-1]; c[i] = b[i]; d[i] = b[i-1] + c[i-1];

if (i > 2) { c[i] += b[i-2]; d[i] += b[i-2] + 2 * c[i-2];

} if (i > 3) {

b[i] += c[i-3] + b[i-3]; c[i] += 2 * c[i-3] + b[i-3]; d[i] += c[i-3];

} if (i > 4) {

b[i] += c[i-4]; c[i] += c[i-4];

} } printf("%3d\t%40.0f\n", j, a[j] + b[j] + d[j]);

} }

Fordítsuk le a forráskódot az Intel vagy a Portland Group C nyelvű fordítója segítségével, majd futassuk le a programot! Vessük össze a kapott eredményeket a korábbiakkal! Ugyanazt kaptuk? A következőkben nézzük meg egy biológiai szempontontból fontos, közepes nagysá-gú molekula, a melatonin konformációs analízisét!

A melatonint az 1950-es években izolálták a tobozmirigyből, majd hamarosan meghatá-rozták konstitúcióját. Maga a vegyület a triptofán katabolizmusa során a szerotoninból kelet-kezik egy kétlépéses enzimkatalizált biokémiai reakcióban. A szekréció elsődleges helye a tobozmirigy, amely az agytörzs és a nagyagy között helyezkedik el. A tobozmirigy a fény-intenzitás megváltozására érzékenyen reagál amikor a retinát fény éri, akkor a látóidegen keresztül érkező inger hatására leállítja a melatonin szintézisét. Ennek következtében az endokrin melatonin-szint nappal alacsony, éjjel magas. A melatoninnal kapcsolatos kutatások meglehetősen szerteágazóak (ALZHEIMER-kór, oxidatív stressz, öregedés) azonban a leginten-zívebben kutatott területek a napi, azaz cirkadián ritmushoz köthető jelenségek (alvás-, ébrenlét-zavarok, álmatlanság, “jet-lag”, “shift-work”). Mindamellett, hogy a melatonin befo-lyással van a cirkadián ritmusra, úgy tűnik, hogy a hosszabb periódusú ritmusok szabályo-zásában is fontos szerepet tölt be (szezonális téli depresszió, annuális szaporodás).

Page 176: Computational Chemistry

Tasi Gyula: Számítógépes kémia

176

Csecsemőkben három hónapos korban kezdődik a melatonin szekréciója, majd a pubertáskor elmúltával fokozatosan csökken a kiválasztott melatonin mennyisége.

A melatonin-molekula atomjainak a számozását és a szabad torziós szögeket a következő ábra mutatja:

7

3

2

4

6

5

3a

17a

14

15

89

10

12

13

11

NH

HN

O

O

CH3

CH3

A molekula konformációs analízisének a végrehajtása már komolyabb kihívást jelent, mint az előbbi egyszerű normál alkánoké. A normál alkánokra vonatkozó konformációs eredménye-ket természetesen alkilláncok esetén is fel lehet használni. Így nem meglepő módon a melatonin esetén is. A melatonin-molekula konformációs analízisének eredményeiről a kö-vetkező cikkek számolnak be részletesen: J. Csontos, M. Kálmán, G. Tasi: Conformational analysis of melatonin at Hartree–Fock ab initio level, THEOCHEM, 640, 69-77 (2003); J. Csontos, M. Kálmán, G. Tasi: The stereochemistry of the chemical expression of darkness, THEOCHEM, 666-667, 515-520 (2003); J. Csontos, P. Kálmán, G. Tasi, M. Kálmán, R.F. Murphy, S. Lovas: The effect of electron correlation on the conformational space of melatonin, Journal of Computational Chemistry, 29, 1466-1471 (2008). A 12.5 feladat a molekula AM1 szintű konformációs analízisével foglalkozik.

Page 177: Computational Chemistry

Tasi Gyula: Számítógépes kémia

177

Feladatok:

12.1 DEMAISON és munkatársainak a cikke [Demaison, J., Herman, M., Liévin, J., Rudolph, H. D.: Equilibrium Structure of Sulfuric Acid, Journal of Physical Chemistry A, 111, 2602-2609 (2007)] részletesen foglalkozik a kénsavmolekula legstabilabb konformerének az egyensúlyi szerkezetével. Próbálja meg az alacsonyabb szintű számítási eredményeket repro-dukálni, s a SemiGeo program segítségével a molekula félempírikus geometriáját meghatá-rozni!

12.2 A BH3NH3 molekula 9 izotopomerjére közöltek kísérleti forgási állandókat az iroda-lomban, amelyekből DEMAISON és munkatársai magasszintű számítások segítségével félem-pírikus egyensúlyi forgási állandókat állítottak elő [Demaison, J., Liévin, J., Császár, A.G., Gutle, C.: Equilibrium Structure and Torsional Barrier of BH3NH3, Journal of Physical Chemistry A, 112, 4477–4482 (2008)]. A SemiGeo program segítségével állítsa elő a molekula félempírikus egyensúlyi geometriáját!

12.3 Készítsen egy FORTRAN nyelvű programot konformációs analízishez szükséges kiindulási geometriák előállításához! Alkalmazzon Monte-Carlo módszert a probléma megol-dására!

12.4 A sehmo.exe program (lásd a 4. projektet) segítségével végezze el az n-pentán teljes konformációs analízisét SEOEM szinten! A kapott optimált szerkezetek közül hogyan tudná kiválasztani az egymástól különbözőket? Írjon egy FORTRAN nyelvű programot a feladat végrehajtására!

12.5 Hajtsa végre a melatonin-molekula teljes konformációs analízisét AM1 szinten a PcMol program (lásd a 15. projektet) segítségével! Hasonlítsa össze az eredményeket a HF szinten kapott eredményekkel! Mit tapasztal, ha AM1 szint helyett PM3 szintet alkalmaz?

12.6 Határozza meg a VA molekula egyensúlyi geometriáját HF/6-31G* és MP2/6-31G* szinteken! A számításokhoz használja a DGB programot (lásd a 14. projektet)! Vesse össze a kapott számítási eredményeket az irodalomban közölt kísérleti és magasszintű számítási ered-ményekkel!

Page 178: Computational Chemistry

Tasi Gyula: Számítógépes kémia

178

13. Véletlenszámok és Monte-Carlo számítások A II. világháború idején NEUMANN János és Stanislaw Marcin ULAM (1909-1984)

matematikusok Los Alamos-ban tanulmányozták neutronok elnyelődését különböző anya-gokban. Mivel a problémát analitikusan nem tudták megoldani, véletlen jelenségekre alapo-zott számítógépes szimulációval oldották meg a feladatot. A projektet titkosnak nyilvání-tották, s névvel kellett ellátni. NEUMANN és ULAM a Monte-Carlo nevet adták a projektnek, utalva a véletlennek a projektben játszott kruciális szerepére, valamint a véletlen és a szeren-csejátékok kapcsolatára.

A számítógépek kitűnően alkalmazhatók véletlen kísérletek szimulációjára és Monte-Carlo számítások végzésére. Az egyedüli fontos feltétel: jó véletlenszám (Eng. random number) generátorral kell rendelkeznünk. Egy számítógépen igen sok kísérletet tudunk végrehajtani rövid idő alatt. Ennek megfelelően a valószínűségelméleti problémák analitikus megoldásával kapott eredményeinket számítógépes szimulációval numerikusan ellenőrizni tudjuk. Sőt, akkor is meghatározhatjuk a helyes választ szimulációval, ha a probléma analitikus megoldása nincs a kezünkben.

A véletlenszámoknak alapvetően három típusát különböztetjük meg: igazi véletlenszámok (Eng. true random numbers), pszeudo-véletlenszámok (Eng. pseudorandom numbers) és kvázi-véletlenszámok (Eng. quasi random numbers).

Az igazi véletlenszámok statisztikus értelemben véletlenek. A sorozat bármely része független az előző számoktól. Az ilyen sorozatok megismételhetetlenek. Előállításukhoz speciális berendezés és sok idő szükséges. Sajnos, szisztematikus hibákat tartalmazhatnak. A RAND cég 1 millió elektromos zajból előállított, igazi véletlenszámot közölt könyv formá-jában 1955-ben. Az elektromos zajon kívül más fizikai folyamatok is alkalmasak igazi vélet-lenszámok előállítására: radioaktív bomlás, kozmikus részecskék előfordulása, stb.

Ha Monte-Carlo módszerekben igazi véletlenszámokat alkalmazunk, akkor az eredmények egzaktak lesznek!

A másik végletet a kvázi-véletlenszámok képviselik. Ezek egyáltalán nem véletlenek, de bizonyos alkalmazásokban (pl. Monte-Carlo integrálásokban) megfelelőek. Meghatározott ponttávolságú rácsok (gridek) generálásával tetszőleges dimenziójú kvázi-véletlen pontokhoz juthatunk.

A Monte-Carlo módszerekben azonban leggyakrabban pszeudo-véletlenszámokat haszná-lunk. Ezeket valamilyen numerikus algoritmussal generáljuk, így a sorozatuk előre jósolható. Általában csak a sorozat előző tagjától függ az aktuális szám:

1 .n nx f x

A függvénykapcsolatot azonban nagyon gondosan kell megválasztani! Leggyakrabban lineáris kongruencia módszereket alkalmazunk:

1 (mod ),j jI a I c m

ahol a, c és m pozitív egészek. Az m moduluszt kellően nagynak az adott körülmények között a lehető legnagyobbnak kell választanunk. Különböző I0 kiindulási számok más és más sorozatot eredményeznek:

Page 179: Computational Chemistry

Tasi Gyula: Számítógépes kémia

179

0 1 2, , , 0,1, 2, , 1 .I I I m

Az a, a c és az m számokat gondosan kell megválasztanunk! A [0,1) intervallumba eső számok Ij/m formában állíthatók elő. A tapasztalat azt mutatja, hogy a következő egyszerűbb formula is ugyanolyan jó, mint az előző:

1 (mod ),j jI a I m

azaz c = 0. A PARK és MILLER által 1969-ben közölt ún. minimális standard módszer paramé-terei:

5

31

7 16,807;

2 1 2,147, 483,647.

a

m

A módszer implementálásához 8 bájtos egészszámok kellenek. Ha csak 4 bájtos egész-számaink vannak, akkor a módszer közvetlenül nem implementálható: az ( 1)a m szorzás ugyanis túlcsordulást okoz. Napjaink FORTRAN fordítói azonban rendelkeznek 8 bájtos egészekkel, így a módszer alkalmazásához nem kell trükközni. Mostanában (szerencsére?) nem kell foglalkoznunk a módszer kódolásával, mivel általában rendelkezésünkre áll egy megfelelő FORTRAN véletlenszám-generátor függvény: rand(). A kérdéses FORTRAN könyvtári függvény a [0,1) intervallumban, egyenletes eloszlásban szolgáltat véletlen duplapontos valós számokat. A 9. projektben megmutatjuk, hogy a centrális határeloszlás tétele (MK: 2-4.) lehetőséget nyújt számunkra, hogy a rand() függvény segítségével normális eloszlású véletlenszámokat állítsunk elő. Az srand(iseed) könyvtári szubrutin pedig lehetőséget ad az I0 értékének a megadására is. Erre akkor van szükség, ha nem szeretnénk minden alkalommal ugyanazt a véletlenszám-sorozatot használni. Az első függvényhívás előtt egyszerűen az iseed egész típusú változónak kell más értéket adnunk. Ugyanaz a kezdőérték mindig ugyanazt a sorozatot adja!

Véletlenszámaink jóságát vizuálisan is ellenőrizhetjük. Generáljunk 1( , )i ix x pontokat egy egységnyi négyzetben! Ha a pontjaink egyenletesen oszlanak el a négyzetben, akkor biztosak lehetünk abban, hogy a generált véletlenszámok céljainknak megfelelnek.

A szerencsejátékok története egyidős az emberiség történetével. A valószínűségelmélet (valószínűségszámítás) kialakulásának kezdetét Blaise PASCAL (1623-1662) és Pierre FERMAT (1601-1665) szerencsejátékokról folytatott levelezésére vezethetjük vissza. A kérdéses levelekben pl. Chevalier DE MÉRÉ (Chevalier = lovag, francia) kockajátékokkal kapcsolatos problémáival foglalkoztak. A lovag ugyanis nagy fogadásokat kötött kockajá-tékokra, s ezekről a fogadásokról szeretett volna, a nagyobb nyeremény reményében, biztos matematikai kiértékelést kapni. RÉNYI Alfréd magyar matematikus a “Levelek a valószínűségről” című lebilincselő könyvében megpróbálta rekonstruálni ezt a levelezést és bemutatni, hogy PASCAL mit gondolhatott a valószínűségszámításról a XVII. és maga a szerző a XX. században. Chevalier DE MÉRÉ problémáit analitikusan már megoldottuk (MK: 2-4.). Próbáljuk most numerikusan megoldani a kérdéses feladatokat!

Először is ki kell találnunk, hogy hogyan szimulálhatjuk a kockadobálást számítógép segítségével. A rand() függvény a [0,1) intervallumban szolgáltat egyenletes eloszlásban, véletlen duplapontos valós számokat. Ezekből kellene valamilyen módon a kockadobálás elemi eseményeit megkapnunk. Osszuk fel a [0,1) intervallumot hat egyenlő részre, majd

Page 180: Computational Chemistry

Tasi Gyula: Számítógépes kémia

180

figyeljük, hogy a rand() által generált valós szám melyik intervallumba esik! Az inter-vallum sorszámát visszaadva a hívó rutinnak, megkapjuk a szükséges véletlen egész számot. Ezzel a kockadobálás számítógépes szimulációjának a kérdését megoldottuk. Egy lehetséges kód a probléma megoldására (cube.f):

c*********************************************************************** integer function cube() c*********************************************************************** implicit none integer idum,number real*8 rn,h,rand parameter(number=6,h=1.d0/number) rn=rand() if(rn.lt.h) then cube=1 elseif(rn.ge.h.and.rn.lt.2.0*h) then cube=2 elseif(rn.ge.2.0*h.and.rn.lt.3.0*h) then cube=3 elseif(rn.ge.3.0*h.and.rn.lt.4.0*h) then cube=4 elseif(rn.ge.4.0*h.and.rn.lt.5.0*h) then cube=5 elseif(rn.ge.5.0*h.and.rn.le.1.0) then cube=6 endif return end

A cube szubrutin meghívásával tehát kockát tudunk dobni számítógéppel. Írjon egy főprog-ramot, aminek segítségével ellenőrizni tudja a kérdéses szubrutin jóságát!

Ezek után numerikusan megoldhatjuk Chevalier DE MÉRÉ problémáit.

1. probléma: Egy kockával négyszer dobunk egymásután. Mi a valószínűsége annak, hogy legalább egy hatost kapunk?

A probléma megoldására a következő egyszerű FORTRAN kódot készítettük (dmere1.f):

c*********************************************************************** program main c*********************************************************************** implicit none integer i,j,n,ngood,cube write(*,'(15x,a)') '***The first problem of Chevalier de Mere***' write(*,'(25x,a/)') '***A Simulation Experiment***' write(*,'(a)') 'Number of experiments = ' read(*,*) n if(n.le.0) then stop 'Wrong number!' else call srand(n) endif ngood=0 do i=1,n do j=1,4 if(cube().eq.6) goto 10 end do

Page 181: Computational Chemistry

Tasi Gyula: Számítógépes kémia

181

cycle 10 ngood=ngood+1 end do write(*,'(a,i10,5x,a,f8.6)') & 'Number of experiments: ',n,'relative frequency: ', & dble(ngood)/dble(n) end

Készítsük el a futtatható bináris programunkat!

>pgf90 –o dmere1.exe –fast dmere1.f cube.f

Százmillió kísérletet végrehajtva a programmal, a kérdéses valószínűségre 0.517718 értéket kapunk, nagyon jól megközelítve a 0.517747 analitikus értéket.

2. probléma: Két kockával dobunk n-szer. Mi a valószínűsége annak, hogy legalább egy dupla hatost kapunk?

A probléma megoldására a következő egyszerű FORTRAN kódot készítettük (dmere2.f):

c*********************************************************************** program main c*********************************************************************** implicit none integer i,j,n,ngood,ntoss,i1,i2,cube write(*,'(15x,a)') '***The 2nd problem of Chevalier de Mere***' write(*,'(22x,a/)') '***A Simulation Experiment***' write(*,'(a)') 'Number of tosses in an experiment: ' read(*,*) ntoss write(*,'(a)') 'Number of experiments = ' read(*,*) n if(n.le.0) then stop 'Wrong number!' else call srand(n) endif ngood=0 do i=1,n do j=1,ntoss i1=cube() i2=cube() if(i1.eq.6.and.i2.eq.6) goto 10 end do cycle 10 ngood=ngood+1 end do write(*,'(a,i5,5x,a,i10,5x,a,f8.6)') 'tosses: ',ntoss, & 'experiments: ',n,'relative frequency: ', & dble(ngood)/dble(n) end

Készítsük el a futtatható bináris programunkat!

>pgf90 –o dmere2.exe –fast dmere2.f cube.f

Százmillió kísérletet végrehajtva a programmal n = 24 esetén, a kérdéses valószínűségre 0.491346 értéket kapunk; n = 25 esetén pedig 0.505497 értéket. Hogyan viszonyulnak a kapott numerikus eredmények az analitikusan számítottakhoz?

Page 182: Computational Chemistry

Tasi Gyula: Számítógépes kémia

182

A továbbiakban először megnézzük, hogy Monte-Carlo módszerrel hogyan határozhatjuk meg többváltozós függvények határozott integrálját, majd definiáljuk molekulák VAN DER

WAALS alakját (Johannes Diderik van der WAALS, 1837-1923, holland fizikokémikus, fizikai Nobel-díj 1910-ben), s Monte-Carlo módszerrel számítjuk ezek térfogatát és felszínét.

Legyen adott egy f(x) többváltozós függvény, melynek az értelmezési tartományát jelöje V. Véletlenszerűen választunk N pontot a V tartományban. Ekkor a számunkra érdekes integ-rált következőképpen közelíthetjük:

22

,V

f ff dV V f V

N

ahol V a tartomány mértéke és

1

22

1

1;

1.

N

ii

N

ii

f fN

f fN

x

x

A hibatag nem szigorú korlát, csak közelítő becslése a hibának. Mi van akkor, ha a V tartomány alakja igen komplikált? Ekkor sincs gond. Válasszunk

egy egyszerű alakú W tartományt, ami tartalmazza a V-t, majd generáljunk véletlenszerűen pontokat a W tartományban! Legyen 0f , ha a pont nem esik a V-be. A W tartományt a lehető legkisebbnek kell választanunk, ugyanis a tartomány növekedésével a hibatag is növekszik (a tartomány mértékével szoroznunk kell!). Az előzőekben bemutatott egyszerű Monte-Carlo integrálás alapvető problémája, hogy a hiba 1 N -nel arányos. Ennek megfele-lően kellő pontossághoz sok pontot kell generálnunk.

Szigorú értelemben a molekulák alakját a molekulához tartozó elektronok eloszlása határozza meg [P.G. Mezey: Shape in Chemistry: An Introduction to Molecular Shape and Topology, VCH Publishers, New York (1993)]. Annak ellenére, hogy izolált molekulák esetén az elektronsűrűség csak a végtelenben válik nullává, a molekuláknak egy jól meghatározott alakot (testet) tulajdoníthatunk, ami tartalmazza az elektronok túlnyomó részét (95-99 %-át). A molekulaalak egy lehetséges közelítését kapjuk, ha az atomokat különböző sugarú gömbökkel reprezentáljuk, s ezeknek a gömböknek a szuperpozícióját (fúzióját) tekintjük. Az atomi gömbök generálására alkalmazhatunk VAN DER WAALS rádiuszokat. Az így kapott alakot VAN DER WAALS molekulaalaknak, a határoló felületet pedig VAN DER

WAALS felületnek nevezzük. Adjuk hozzá az atomi VAN DER WAALS sugarakat a blockdata.f fájlhoz!

************************************************************************ block data ************************************************************************ implicit real*8 (a-h,o-z) implicit integer*4(i-n) common/weight/ wt(90),vdwr(90) common/adat1/ pi,delta data pi,delta/0.d0,0.01d0/ c

Page 183: Computational Chemistry

Tasi Gyula: Számítógépes kémia

183

c Atomic weights of the most stable isotopes of the elements c data wt/ 1.00783d0, 4.00260d0, 6.94000d0, 9.01218d0, $ 10.81000d0, 12.00000d0, 14.00307d0, 15.99491d0, 18.99840d0, $ 20.17900d0, 22.98977d0, 24.30500d0, 26.98154d0, 28.08550d0, $ 30.97376d0, 32.06000d0, 35.45300d0, 39.94800d0, 39.09830d0, $ 40.08000d0, 44.95590d0, 47.90000d0, 50.94150d0, 51.99600d0, $ 54.93800d0, 55.84700d0, 58.93320d0, 58.71000d0, 63.54600d0, $ 65.38000d0, 69.73500d0, 72.59000d0, 74.92160d0, 78.96000d0, $ 79.90400d0, 83.80000d0, 85.46780d0, 87.62000d0, 88.90590d0, $ 91.22000d0, 92.90640d0, 95.94000d0, 98.90620d0, 101.0700d0, $ 102.9055d0, 106.4000d0, 107.8680d0, 112.4100d0, 114.8200d0, $ 118.6900d0, 121.7500d0, 127.6000d0, 126.9045d0, 131.3000d0, $ 132.9054d0, 137.3300d0, 15*0.000d0, 178.4900d0, 180.9479d0, $ 183.8500d0, 186.2070d0, 190.2000d0, 192.2200d0, 194.9648d0, $ 196.9665d0, 200.5900d0, 204.3700d0, 207.2000d0, 208.9804d0, $ 7*0.000d0/ c c Atomic van der Waals radii of the elements c data vdwr/ $ 1.1850d0, 1.7850d0, 1.5199d0, 1.1430d0, 1.7000d0, 1.7500d0, $ 1.5250d0, 1.4000d0, 1.3500d0, 1.6000d0, 1.8579d0, 1.6047d0, $ 1.4318d0, 2.0000d0, 1.9000d0, 1.8500d0, 1.7800d0, 1.9000d0, $ 2.2620d0, 1.9758d0, 1.6545d0, 1.4755d0, 1.3090d0, 1.2490d0, $ 1.3500d0, 1.2411d0, 1.2535d0, 1.2460d0, 1.2780d0, 1.3325d0, $ 1.3501d0, 1.2248d0, 2.1000d0, 2.0000d0, 1.9700d0, 2.0000d0, $ 2.4700d0, 2.1513d0, 1.8237d0, 1.6156d0, 1.4318d0, 1.3626d0, $ 1.3675d0, 1.3529d0, 1.3450d0, 1.3755d0, 1.4447d0, 1.4894d0, $ 1.6662d0, 1.5375d0, 2.2000d0, 2.2000d0, 2.2000d0, 2.2000d0, $ 2.6325d0, 2.1705d0, 1.8725d0, 1.8243d0, 1.8362d0, 1.8295d0, $ 1.8090d0, 1.8040d0, 1.9840d0, 1.8180d0, 1.8005d0, 1.7951d0, $ 1.7886d0, 1.7794d0, 1.7687d0, 1.9396d0, 1.7515d0, 1.5973d0, $ 1.4280d0, 1.3705d0, 1.3800d0, 1.3676d0, 1.3573d0, 1.3873d0, $ 1.4419d0, 1.5025d0, 1.7283d0, 1.7501d0, 1.4600d0, 1.4600d0, $ 1.4500d0, 1.4300d0, 0.0000d0, 0.0000d0, 0.0000d0, 0.0000d0/ end

A weight common mezőben levő vdwr() tömb tartalmazza a rádiuszokat 90 elemre. (Néhány elemre zéró érték szerepel!)

Hogyan generálhatunk pontokat a molekula VAN DER WAALS felületén? Induljunk ki egy egységnyi sugarú gömbön, egyenletes eloszlásban generált ponthalmazból (lásd a 10. projektet)! Ezt az ún. templátgömböt az atomi centrumokba helyezzük, majd az atomi VAN

DER WAALS sugarakkal skálázzuk őket. Csak azokat a pontokat tartjuk meg, melyek nem tartoznak a többi gömbhöz. A VAN DER WAALS felület előállítására szolgáló kód (vdw.f):

************************************************************************ program main ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) character title*70 parameter(mat=100,maxppc=1000,maxp=mat*maxppc) common/weight/ wt(90),vdwr(90) dimension coord(3,mat),cord(3,mat),nat(mat),p(3,maxp) dimension cir(3,maxppc) read(*,'(a70)') title

Page 184: Computational Chemistry

Tasi Gyula: Számítógépes kémia

184

read(*,*) natoms do i=1,natoms read(*,*) nat(i),(coord(j,i),j=1,3) end do write(*,'(a,a70/)') 'Title: ',title write(*,'(a)') 'Molecular geometry (Angstroms)' write(*,'(16x,a1,16x,a1,15x,a1,15x,a1)') 'x','y','z','w' do i=1,natoms write(*,'(i3,2x,4f16.6)') nat(i),(coord(j,i),j=1,3),wt(nat(i)) end do c c Computation of the center of mass of the molecule c call cmass(natoms,nat,wt,coord,wmol,cmx,cmy,cmz) write(*,'(/a,f16.6)') 'Molecular weight= ',wmol write(*,'(/a/)') 'Center of mass' write(*,'(3(3x,a5,f13.6))') 'cmx= ',cmx,' cmy= ',cmy,' cmz= ', $ cmz write(*,'(/a/)')'Cartesian coordinates related to center of mass' do i=1,natoms write(*,'(i3,2x,3f16.6)') nat(i),(coord(j,i),j=1,3) end do c c Get the points on a unit sphere c open(7,file='points.dat',status='unknown') read(7,*) ncir do i=1,ncir read(7,*) cir(1,i),cir(2,i),cir(3,i) end do close(7) c c Generation of the van der Waals surface of the molecule c call vdw(natoms,nat,coord,np,ncir,cir,p) c open(7,file='vdw.dat',status='unknown') write(7,'(i5)') np do i=1,np write(7,'(3f20.12)') (p(j,i),j=1,3) end do close(7) c end ************************************************************************ subroutine vdw(natoms,nat,coord,np,ncir,cir,p) ************************************************************************ * Subroutine VDW calculates the van der Waals surfaces of molecules. * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) character title*72 parameter(mat=100,maxppc=500,maxp=mat*maxppc) common/weight/ wt(90),vdwr(90)

Page 185: Computational Chemistry

Tasi Gyula: Számítógépes kémia

185

dimension p(3,maxp),cir(3,maxppc),nat(mat),coord(3,mat),dr(3) np=0 do i=1,natoms ri=vdwr(nat(i)) do j=1,ncir np=np+1 do m=1,3 p(m,np)=ri*cir(m,j)+coord(m,i) end do do k=1,natoms if(k.eq.i) cycle do m=1,3 dr(m)=p(m,np)-coord(m,k) end do rpk=dsqrt(dot(dr,dr,3)) if(rpk.lt.vdwr(nat(k))) then np=np-1 goto 10 endif end do 10 continue end do end do return end

A következő utasítással készíthetjük el a futtatható vdw.exe programunkat:

>pgf90 –o vdw.exe vdw.f cmass.f blockdata.f dot.f

Tegyük fel, hogy a 2,6-diizopropilnaftalin-molekula (2,6-DIPN) VAN DER WAALS molekula-alakját szeretnénk meghatározni. A molekula geometriáját a dipn26.opt fájl tartalmazza:

2,6-DIPN: RMP2(full)/6-31G*, C2h 36 6 0.4304475995 -1.7844096714 -0.3620300196 6 1.670751991 -1.9141844907 0.2340385932 6 2.2286343711 -0.786266842 0.8901444867 6 1.5585499797 0.4160172358 0.9384125627 6 0.2865442679 0.5642581398 0.3320650067 6 -0.2865440054 -0.564257969 -0.3320655131 6 -0.4304472766 1.7844099003 0.3620293744 6 -1.6707518962 1.9141845656 -0.2340387679 6 -2.2286341945 0.7862669589 -0.8901448398 6 -1.558549863 -0.4160171437 -0.938412822 6 2.4224600337 -3.2227408689 0.1930317172 6 3.7491288328 -3.0793719776 -0.5549850532 6 2.6400581399 -3.7839961421 1.599366466 1 1.799055538 -3.9372791664 -0.3616056278 1 4.4216505247 -2.3946999487 -0.0292763361 1 3.5879477753 -2.688008321 -1.56332494 1 4.2535374081 -4.047854854 -0.6366245128 1 3.2792231058 -3.1205118872 2.1898642692 1 1.6883830402 -3.8948591624 2.1265458525 1 3.1260473506 -4.7641819044 1.5535141465 1 -0.0148819758 -2.6400727369 -0.8711477519 1 3.2042889233 -0.8696309085 1.3651488416 1 2.0029160167 1.2708639423 1.4467675696 1 0.0148823714 2.6400730067 0.8711469741 1 -2.0029158512 -1.2708638193 -1.4467679229

Page 186: Computational Chemistry

Tasi Gyula: Számítógépes kémia

186

1 -3.2042886542 0.8696310961 -1.3651493699 6 -2.422459672 3.2227411169 -0.1930324605 6 -3.7491261954 3.0793741824 0.5549887082 6 -2.6400619103 3.7839931708 -1.5993678693 1 -1.7990528184 3.9372809439 0.3616002631 1 -3.5879420134 2.6880135443 1.5633292644 1 -4.4216492176 2.3947003562 0.029284015 1 -4.2535348341 4.0478571413 0.6366268077 1 -3.2792287942 3.1205077628 -2.1898622833 1 -1.6883883475 3.8948547823 -2.1265503392 1 -3.1260507613 4.7641791416 -1.5535163378

A points.dat fájlnak kell tartalmaznia az egységnyi sugarú gömbön előállított pontokat. A vdw.dat fájl pedig a számított VAN DER WAALS felület pontjait foglalja magába. A számításokat a következő utasításokkal hajthatjuk végre:

>cp pont500.dat points.dat >vdw.exe < dipn26.opt >mv vdw.dat dipn26.vdw

A molekula VAN DER WAALS felületét végülis a dipn26.vdw fájl tartalmazza. A kérdéses fájl 5836 pont DESCARTES-koordinátáiból áll, így a tartalmát itt nem mutatjuk be. A gnuplot program segítségével azonban a ponthalmazt grafikusan megjeleníthetjük:

gnuplot>load ’dipn26.gp’

A szükséges dipn26.gp szkript tartalma:

set title "van der Waals surface" set style data dots set term x11 size 650,650 set ticslevel 0 set view equal xyz set xrange [-8.0 : 8.0] set yrange [-8.0 : 8.0] set zrange [-8.0 : 8.0] set nokey splot "dipn26.vdw" lt -1

A gnuplot program ingyen letölthető az internetről, s részletes használati utasítás tartozik hozzá.

A molekulák alakja és mérete rendkívül fontos molekuláris tulajdonságok alakszelektív folyamatok szempontjából. A molekulák alakját a molekulán belüli elektronok eloszlása határozza meg. Mivel a molekulákban kötött elektronok mozgását a kvantummechanika törvényei írják le, ezért a molekulaalak alapvető kvantummechanikai tulajdonság, s külön-bözik a megfelelő hagyományos makroszkópikus tulajdonságtól. A molekulaalakról, annak kvantummechanikai számításáról, s alakszelektív folyamatokban való jelentőségéről további részletek találhatók a következő cikkben: G. Tasi, I. Pálinkó, Á. Molnár, I. Hannus: Molecular shape, dimensions, and shape selective catalysis, J. Mol. Struct.: THEOCHEM, 666-667, 69-77 (2003).

Page 187: Computational Chemistry

Tasi Gyula: Számítógépes kémia

187

Minden IPN és DIPN izomer esetén meghatároztuk a lehetséges konformereket, majd a további számításokat ezeken a geometriákon végeztük [G. Tasi, F. Mizukami, I. Pálinkó, M. Toba, Á. Kukovecz: Positional Isomerization of Dialkylnaphthalenes: A Comprehensive Interpretation of the Selective Formation of 2,6-DIPN over HM Zeolite, Journal of Physical Chemistry A, 105, 6513-6518 (2001); G. Tasi, I. Pálinkó, F. Mizukami: Shape-selective alkylation of isopropylnaphthalene over HM zeolite: A theoretical study, Reaction Kinetics and Catalysis Letters, 74, 317-322 (2001)]. A molekulák körül egy 400 x 400 x 400 pontból álló 3-dimenziós köbös rácsot vettünk fel, majd mindenegyes rácspontban MP2/6-31G* szinten számítottuk az elektronsűrűséget. A kvantumkémiai molekulaalakot a következő nívófelülettel definiáltuk:

30{( , , ) | ( , , ) }molS x y z x y z ,

ahol 30 0.001 elektron/bohr volt. Az utóbbi értéket, figyelembe véve a mordenit típusú

zeolit (HM) pórusainak az átmérőjét, kalibráció segítségével határoztuk meg. A 2,6-DIPN molekula kvantummechanikai molekulaalakját a következő ábra mutatja:

Látható, hogy az alak egy rúdhoz hasonlít (kvázi-lineáris struktúra). A számítások azt mutat-ják, hogy a 2,7-DIPN molekula alakja ettől jelentősen különbözik:

Page 188: Computational Chemistry

Tasi Gyula: Számítógépes kémia

188

A kapott kvantummechanikai nívófelületeket a lehető legkisebb dobozba zártuk úgy, hogy a doboz egyik keresztmetszete minimális volt. A feladatot mellékfeltétel melletti para-méterbecsléssel oldottuk meg a szimplex-eljárást használva. Az így kapott optimális doboz dimenzióit használtuk fel a molekula térbeli kiterjedésének a jellemzésére. Az alábbi táblázat a kérdéses molekulák számított kvantummechanikai dimenzióit mutatja be (Å):

Molekula a b c 1-IPN 5.86 8.62 11.09 2-IPN 6.61 6.61 12.03 1,4-DIPN 6.22 9.46 12.05 1,5-DIPN 6.45 8.78 12.44 1,8-DIPN 6.59 9.99 10.16 1,2-DIPN 6.95 8.72 11.69 1,3-DIPN 6.89 9.96 11.84 1,6-DIPN 6.81 8.10 13.17 1,7-DIPN 6.87 8.96 11.84 2,3-DIPN 6.76 9.86 11.35 2,6-DIPN 6.61 6.61 14.23 2,7-DIPN 6.62 7.26 13.76

Felmerül a kérdés, hogy VAN DER WAALS rádiuszok (egyszerű gömbök) segítségével reprodu-kálni tudjuk-e az IPN és a DIPN molekulák kvantummechanikai alakját és méretét? A követ-kező táblázat a VAN DER WAALS rádiuszok segítségével meghatározott molekulaméreteket mutatja. A számítások során ugyanazokat az egyensúlyi molekulageometriákat alkalmaztuk, mint amiket a kvantumkémiai számításoknál.

Molekula a b c 1-IPN 5.41 8.78 9.70 2-IPN 6.18 6.18 11.67 1,4-DIPN 5.78 9.03 11.68 1,5-DIPN 6.01 8.40 11.87 1,8-DIPN 6.12 9.63 9.75 1,2-DIPN 6.52 8.34 11.34 1,3-DIPN 6.46 10.08 10.18 1,6-DIPN 6.37 7.71 12.72 1,7-DIPN 6.44 8.57 11.35 2,3-DIPN 6.29 9.32 10.66 2,6-DIPN 6.17 6.17 13.64 2,7-DIPN 6.17 6.81 13.34

Látható, hogy a VAN DER WAALS méretek jelentősen kisebbek, mint a kvantumkémiai mére-tek. Azonban előfordulhat, hogy az eltérés szisztematikus, s a rádiuszok egyszerű skálázá-sával (növelésével) reprodukálni tudjuk a kvantumkémiai méreteket.

Page 189: Computational Chemistry

Tasi Gyula: Számítógépes kémia

189

A számítások alapján megállapítható volt, hogy mordenit zeolit esetén a 2-IPN és a 2,6-DIPN izomereknek a legkedvezőbbek a molekuláris dimenziói. A kvantumkémiai számítások azt is megmutatták, hogy a DIPN izomerek egyensúlyi elegyében a 2,6- és a 2,7-izomerek fordulnak elő a legnagyobb mennyiségben (2,6: 48.7 %, 2,7: 46.0 %, 298.15 K-en és 1 atm nyomáson). Látható, hogy nem a termodinamika, hanem a molekulaméret favorizálja a 2,6-izomer keletkezését a 2,7-izomerrel szemben a naftalin HM zeoliton történő izopropilezése során.

A VAN DER WAALS molekulaalak térfogatának és felszínének számításához a következőkben Monte-Carlo módszert fogunk alkalmazni. A térfogat számításához a moleku-lát egy megfelelő méretű dobozba zárjuk, majd véletlenszerűen pontokat generálunk a dobozban. A pontok közül nyilvántartjuk azokat, amelyek valamelyik atomi gömbbe esnek. Ezeket nevezzük “jó” pontoknak. A molekula térfogatát a következő formula adja meg:

2

,j j

t t

N N

N Njmol doboz doboz

t t

NV V V

N N

aho Nj a jó pontok, Nt az összes pontok száma. A térfogat meghatározásához a következő kódot készítettük (mcvol.f):

************************************************************************ program main ************************************************************************ * Program MCVOL calculates the van der Waals volume of a molecule. * * (C) Dr. G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1. * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) character title*70 parameter(mat=100) common/weight/ wt(90),vdwr(90) dimension nat(mat),coord(3,mat) write(*,'(10x,a)') & '***van der Waals molecular volume via Monte Carlo method***' read(*,*) np write(*,'(/a,i8)') 'Number of points: ',np if(np.le.0) then stop 'Wrong number!' else call srand(np) endif read(*,'(a70)') title write(*,'(a70)') title read(*,*) natoms do i=1,natoms read(*,*) nat(i),(coord(j,i),j=1,3) write(*,'(i5,3f10.5)') nat(i),(coord(j,i),j=1,3) end do xmin= 1.d9 ymin= 1.d9

Page 190: Computational Chemistry

Tasi Gyula: Számítógépes kémia

190

zmin= 1.d9 xmax=-1.d9 ymax=-1.d9 zmax=-1.d9 rmax=-1.d9 do l=1,natoms if(xmax.lt.coord(1,l)) xmax=coord(1,l) if(ymax.lt.coord(2,l)) ymax=coord(2,l) if(zmax.lt.coord(3,l)) zmax=coord(3,l) if(rmax.lt.vdwr(nat(l))) rmax=vdwr(nat(l)) if(xmin.gt.coord(1,l)) xmin=coord(1,l) if(ymin.gt.coord(2,l)) ymin=coord(2,l) if(zmin.gt.coord(3,l)) zmin=coord(3,l) end do rmax=1.1d0*rmax xmin=xmin-rmax ymin=ymin-rmax zmin=zmin-rmax xmax=xmax+rmax ymax=ymax+rmax zmax=zmax+rmax vcub=(xmax-xmin)*(ymax-ymin)*(zmax-zmin) jopont=0 do i=1,np ux=xmin+rand()*(xmax-xmin) uy=ymin+rand()*(ymax-ymin) uz=zmin+rand()*(zmax-zmin) do l=1,natoms dist1=vdwr(nat(l)) dist=(coord(1,l)-ux)**2+(coord(2,l)-uy)**2+ & (coord(3,l)-uz)**2 dist=dsqrt(dist) if(dist.le.dist1) then jopont=jopont+1 goto 20 endif end do 20 continue end do vmol=dble(jopont)/dble(np)*vcub dvmol=dble(jopont)/dble(np)-(dble(jopont)/dble(np))**2 dvmol=vcub*dsqrt(dvmol/dble(np)) write(*,'(/a)') '***Results***' write(*,'(a,i10)') 'Number of points: ',np write(*,'(a,i10)') 'Good points : ',jopont write(*,'(a,f10.4)') 'Volume: ',vmol write(*,'(a,f10.4)') 'Error : ',dvmol end

A felszín számítása érdekében minden atom esetén egy lokális térbeli polárkoordináta-rendszert veszünk fel, majd az atomi gömbök felületén véletlenszerűen pontokat generálunk. Ha egy generált pont nem esik másik gömb belsejébe, akkor azt mondjuk, hogy az a kérdéses atom szabad atomi felületéhez tartozik (“jó” pont). Az i-ik atom szabad atomi felszíne:

2

2 24 vdwr( ) 4 vdwr( ) .

j j

t t

N i N i

N i N ija

t t

N iS i i i

N i N i

Page 191: Computational Chemistry

Tasi Gyula: Számítógépes kémia

191

A molekula felszínét pedig a szabad atomi felszínek összege adja:

1

,aN

mol ai

S S i

ahol Na a molekulát alkotó atomok száma. A felszín számítására készített kód (mcsurf.f):

************************************************************************ program main ************************************************************************ * Program MCSURF calculates the van der Waals surface of a molecule. * * (C) Dr. G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1. * * H-6720 Szeged, Hungary * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) character title*72 parameter(mat=100) common/weight/ wt(90),vdwr(90) dimension nat(mat),coord(3,mat) pi=4.d0*datan(1.d0) write(*,'(10x,a)') & 'van der Waals surface area via Monte Carlo method' read(*,*) np write(*,'(a,i12)') 'Number of points per atom: ',np if(np.le.0) then stop 'Wrong number!' else call srand(np) endif read(*,'(a72)') title write(*,'(a72)') title read(*,*) natoms do i=1,natoms read(*,*) nat(i),(coord(j,i),j=1,3) write(*,'(i5,3f10.5)') nat(i),(coord(j,i),j=1,3) end do sum=0.d0 do j=1,natoms jopont=0 sa=0.d0 do i=1,np 10 vx=rand()-0.5d0 vy=rand()-0.5d0 vz=rand()-0.5d0 r=dsqrt(vx*vx+vy*vy+vz*vz) if(r.gt.0.5d0) goto 10 ux=coord(1,j)+vx*vdwr(nat(j))/r uy=coord(2,j)+vy*vdwr(nat(j))/r uz=coord(3,j)+vz*vdwr(nat(j))/r do l=1,natoms if(l.ne.j) then dist1=vdwr(nat(l)) dist=(coord(1,l)-ux)**2+(coord(2,l)-uy)**2+ & (coord(3,l)-uz)**2 dist=dsqrt(dist)

Page 192: Computational Chemistry

Tasi Gyula: Számítógépes kémia

192

if(dist.le.dist1) goto 20 endif end do jopont=jopont+1 20 continue end do sa=4.d0*pi*vdwr(nat(j))**2*dble(jopont)/dble(np) write(*,*) nat(j),np,jopont,sa sum=sum+sa end do write(*,'(/a)') '***Results***' write(*,'(a,i10)') 'Number of points: ',np*natoms write(*,'(a,f10.4)') 'Surface area: ',sum end

Egyszerű példaként tekintsük a benzolmolekulát! Készítsük el a számításokhoz szükséges inputfájlt (benzene.dat)!

benzol: d(C-C)=1.4 A, d(C-H)=1.1 A, D6h 12 6 0.000000 1.400000 0.000000 6 1.212436 0.700000 0.000000 6 1.212436 -0.700000 0.000000 6 0.000000 -1.400000 0.000000 6 -1.212436 -0.700000 0.000000 6 -1.212436 0.700000 0.000000 1 0.000000 2.500000 0.000000 1 2.165064 1.250000 0.000000 1 2.165064 -1.250000 0.000000 1 0.000000 -2.500000 0.000000 1 -2.165064 -1.250000 0.000000 1 -2.165064 1.250000 0.000000

Az mcvol.exe program a következő outputot írja ki a képernyőre:

**van der Waals molecular volume via Monte Carlo method*** Number of points: 10000000 benzol: d(C-C)=1.4 A, d(C-H)=1.1 A, D6h 6 0.00000 1.40000 0.00000 6 1.21244 0.70000 0.00000 6 1.21244 -0.70000 0.00000 6 0.00000 -1.40000 0.00000 6 -1.21244 -0.70000 0.00000 6 -1.21244 0.70000 0.00000 1 0.00000 2.50000 0.00000 1 2.16506 1.25000 0.00000 1 2.16506 -1.25000 0.00000 1 0.00000 -2.50000 0.00000 1 -2.16506 -1.25000 0.00000 1 -2.16506 1.25000 0.00000 ***Results*** Number of points: 10000000 Good points : 3103377 Volume: 86.4965 Error : 0.0408

Tehát a benzolmolekula VAN DER WAALS térfogata: 86.50 0.04 Å3. Most határozzuk meg a molekula felszínét is!

Page 193: Computational Chemistry

Tasi Gyula: Számítógépes kémia

193

van der Waals surface area via Monte Carlo method Number of points per atom: 1000000 benzol: d(C-C)=1.4 A, d(C-H)=1.1 A, D6h 6 0.00000 1.40000 0.00000 6 1.21244 0.70000 0.00000 6 1.21244 -0.70000 0.00000 6 0.00000 -1.40000 0.00000 6 -1.21244 -0.70000 0.00000 6 -1.21244 0.70000 0.00000 1 0.00000 2.50000 0.00000 1 2.16506 1.25000 0.00000 1 2.16506 -1.25000 0.00000 1 0.00000 -2.50000 0.00000 1 -2.16506 -1.25000 0.00000 1 -2.16506 1.25000 0.00000 6 1000000 287816 11.07645773202360 6 1000000 287654 11.07022324140255 6 1000000 287780 11.07507228966337 6 1000000 287415 11.06102544351100 6 1000000 287095 11.04871040030893 6 1000000 287643 11.06979991179248 1 1000000 413869 7.303137247700033 1 1000000 413709 7.300313885815881 1 1000000 413938 7.304354822512574 1 1000000 414302 7.310777970799019 1 1000000 414220 7.309330997833392 1 1000000 413773 7.301443230569542 ***Results*** Number of points: 12000000 Surface area: 110.2306

A benzolmolekula VAN DER WAALS felszíne: 110.23 Å2. Szerencsére, a kapott numerikus számítási eredményeket össze tudjuk vetni az analitikus számítási eredményekkel: Buša Ján, Džurina Jozef, Hayryan Edik, Hayryan Shura, Hu Chin-Kun, Plavka Ján, Pokorný Imrich, Skřivánek Jaroslav, Wu Ming-Chya, ARVO: A Fortran package for computing the solvent accessible surface area and the excluded volume of overlapping spheres via analytic equations, Computer Physics Communications, 165, 59–96 (2005). Az ARVO programhoz FORTRAN forráskód formájában hozzá tudunk férni, így a benzolmolekulára könnyen végre tudjuk hajtani az analitikus számítást:

Volume: 86.54 Å3 Area: 110.29 Å2 Megállapíthatjuk, hogy a Monte-Carlo módszerrel kapott számítási eredmények igen jól megegyeznek az analitikus számítási eredményekkel.

Page 194: Computational Chemistry

Tasi Gyula: Számítógépes kémia

194

Feladatok:

13.1 Határozza meg az alábbi molekulák VAN DER WAALS térfogatát és felszínét! Ábrázolja az eredményeket a szénatomok számának a függvényében! Mennyivel növekszik a térfogat és a felszín CH2-csoportonként? Molekulák: metán, etán, propán, n-bután és n-pentán. A legstabilabb konformeren végezze el a számítást minden esetben!

13.2 A n-hexánnak 12 nemizomorf konformere van (lásd a 12. projektet). Határozza meg mindegyik konformer VAN DER WAALS térfogatát és felszínét! Melyik a legkisebb térfogatú és felszínű konformer?

*13.3 Készítsen egy FORTRAN programot molekulák VAN DER WAALS dimenzióinak a meg-határozására! A szimplex-módszer segítségével határozza meg azt a minimális keresztmet-szetű, legkisebb térfogatú dobozt, ami a molekulaalakot magába foglalja! A paraméterek a tömegközéppontban felvett DESCARTES-koordináta-rendszer tengelyei körüli forgatások szögei legyenek (lásd a 2. projektet)! Különböző pontokból indítsa el a procedurát, s hatá-rozza meg a globális minimumot!

*13.4 Határozza meg az IPN és a DIPN molekulák különböző izomerjei legstabilabb konformerének a VAN DER WAALS dimenzióit! Vesse össze a számítási eredményeket a feje-zetben közöltekkel! Meg tudja határozni úgy a hidrogén és a szén VAN DER WAALS sugarát, hogy a számított méretek közel azonosak legyenek a fejezetben közölt kvantumkémiai mére-tekkel?

13.5 Pt-MCM-41 katalizátoron tanulmányozták 1-hexén, ciklohexén, sztirol, 1-pentin és 1-hexin folyadékfázisú hidrogénezését enyhe körülmények között [Mastalir, Á., Rác, B., Király, Z., Tasi, G., Molnár, Á.: Preparation of monodispersed Pt nanoparticles in MCM-41, catalytic applications, Catalysis Communications, 9, 762-768 (2008)]. A mérések alapján arra a feltevésre jutottak, hogy a katalizátor mezopórusaiban kialakuló Pt részecskék gátolják a molekulák diffúzióját a csatornákban. Határozza meg a kérdéses molekulák VAN DER

WAALS dimenzióit! Melyik molekula a legkisebb méretű a számítások szerint? A tapasztalt katalitikus aktivitás melyik molekula esetén volt a legnagyobb? A két eredmény összhangban van egymással? Hasonlítsa össze az eredményeit az irodalomban közöltekkel!

*13.6 Az alábbi cikkben a szerzők korrelációt keresnek szerves molekulák felszíne és egyéb tulajdonságai (párolgáshő, kritikus tulajdonságok, forráspont és oldhatóság) között: R.C. Mebane, S.A. Schanley, T.R. Rybolt, C.D. Bruce: The Correlation of Physical Properties of Organic Molecules with Computed Molecular Surface Areas, Journal of Chemical Education, 76, 688-693 (1999). Dolgozza fel a kérdéses cikket, s próbálja meg reprodukálni a közölt számítási eredményeket!

*13.7 A reakciókinetika differenciálegyenleteit (MK: 2-6.) is megoldhatjuk Monte-Carlo módszerrel: W.D. Moebs, E.A. Haglund: A Simple Monte Carlo Method for Teaching Chemical Kinetics, Journal of Chemical Education, 53, 506-507 (1976). Dolgozza fel a kérdéses cikket, s írjon egy FORTRAN nyelvű programot reakciókinetikai sebességi egyen-letek Monte-Carlo módszerrel történő integrálására!

Page 195: Computational Chemistry

Tasi Gyula: Számítógépes kémia

195

13.8 Egy enzimkatalitikus reakció első közelítésben a következő reakciósorozattal írható le:

1 2

1

,k k

kE S ES P E

ahol E az enzim, S a szubsztrátum, ES az enzim-szubsztrátum komplex, és P a termék. A kérdéses reakciórendszert modellező ODE-rendszer a következő:

1 1 1 1

[ ][ ] [ ] [ ];

d Sr r k S E k ES

dt

1 1 2 1 1 2

[ ][ ] [ ] [ ] [ ];

d Er r r k S E k ES k ES

dt

1 1 2 1 1 2

[ ][ ] [ ] [ ] [ ];

d ESr r r k S E k ES k ES

dt

2 2

[ ][ ].

d Pr k ES

dt

A kezdeti ( 0t ) feltételek a következők: 0[ ] [ ] 0E E , 0[ ] [ ] 0S S , 0[ ] [ ] 0ES ES , és

0[ ] [ ] 0.P P Változtatva a kiindulási koncentrációkat, oldja meg a kérdéses ODE-rendszert Monte-Carlo módszerrel (13.6 feladat)! Ábrázolja a kapott eredményeket grafikusan is!

Page 196: Computational Chemistry

Tasi Gyula: Számítógépes kémia

196

14. A HARTREE-FOCK-féle önkonzisztens tér (HF SCF) módszer A kvantumkémia célja molekulák geometriájának (szerkezetének), elektronszerkezetének

és fizikai tulajdonságainak a meghatározása a kvantummechanika eszközeinek a segítségével. Alapjában véve a kvantummechanika egyenleteinek a szigorú megoldásával ezt el tudnánk érni. A baj csak az, hogy a kérdéses egyenleteket nem tudjuk analitikusan megoldani, így közelítő módszereket kell alkalmaznunk. Bár tetszőleges pontosságot el tudunk érni a számí-tások révén, ennek azonban nagy ára van: minél pontosabb a módszer, annál költségesebb az alkalmazása.

A kvantumkémia a molekulaszerkezeti számításokhoz a közelítések különböző szintjeit nyújtja. A legszigorúbb ab initio módszerek az alapvető fizikai állandókon kívül (lásd a Néhány alapvető és származtatott fizikai állandó című részt) más kísérleti adatokat nem használnak fel a számítások során: csak az atommagok számának és típusának, valamint az elektronok számának az ismeretére van szükség. A legalapvetőbb ab initio módszer a HARTREE-FOCK–féle önkonzisztens tér (HF SCF, Eng. Hartree-Fock Self-Consistent Field) módszer, ami a molekula elektron-hullámfüggvényét egyetlenegy SLATER-determinánssal közelíti. Ez a módszer az alapja a molekulapálya-elméletnek, ami a kémikusi gondolkodás legalapvetőbb fogalmait, a molekulapályákat és a molekulapálya-energiákat nyújtja (lásd még a 4. projektet). A bonyolultabb, ún. elektronkorrelációs (pl. perturbációs) kvantumkémiai módszerek is általában a HF SCF-MO számítási eredményekből indulnak ki. Az is fontos tény, hogy a HF szinten számított egyensúlyi molekulageometriák az esetek többségében jó közelítést adnak a kísérleti értékekre.

B.J. DUKE és B. O’LEARY 1992-ben felhívták a figyelmet az ab initio kvantumkémiai programok oktatásban való alkalmazásának a fontosságára [B.J. Duke and B. O’Leary: The Gaussian Programs as a Teaching Tool, A Case Study on Molecular Hydrogen Calculations, Journal of Chemical Education, 69, 529 (1992)]: “We suggest that students be exposed as early as possible to ab initio quantum chemistry programs, such as GAUSSIAN, that are now readily available.” A kérdéses cikkben a szerzők részletesen tárgyalják az ab initio kvantumkémiai módszerek alkalmazását a hidrogén-molekulára. Kitűnő bevezetést nyújt a témába a következő cikk is: S. Bell, T.J. Dines, B.Z. Chowdry, R. Withnall: Computational Chemistry Using Modern Electronic Structure Methods, Journal of Chemical Education, 84, 1364 (2007). Tárgyalja a számításokhoz leggyakrabban használt bázisokat, az egyszerűbb elektronkorrelációs módszereket és a geometriai optimalizálás, valamint a molekuláris tulaj-donságok számításának a fontosságát. A.M. HALPERN cikke [A. M. Halpern: Structural and Thermodynamic Properties of the Argon Dimer, Journal of Chemical Education, 87, 174 (2010)] az argondimer szerkezeti és termodinamikai tulajdonságainak a számításán keresztül mutatja be az ab initio kvantumkémia, a statisztikus mechamika és a termodinamika kapcso-latát.

A HF SCF-MO számítások legfontosabb összetevői az atompályák, az ún. bázisfüggvé-nyek, amik segítségével az elektron-hullámfüggvény meghatározásához szükséges egy- és kételektron-integrálokat számítjuk. Különösen a kételektron-integrálok száma nagy, 4m , ahol m a bázisfüggvények száma. Ennek következtében nem mindegy, hogy milyen típusú

Page 197: Computational Chemistry

Tasi Gyula: Számítógépes kémia

197

függvényeket alkalmazunk. A következőkben az analitikus alakok közül a két legfontosabbat nézzük meg.

A SLATER-pályákat, helyesebben SLATER típusú függvényeket (Eng. Slater-type orbital, STO; Slater-type function, STF), valamint a GAUSS-pályákat, helyesebben GAUSS típusú függvényeket (Eng. Gaussian-type orbital, GTO; Gaussian-type function, GTF), régóta alkalmazzák – mint bázisfüggvényeket – kvantumkémiai számításokban. Atomokon centrált STO és GTO függvények lineáris kombinációjával állítjuk elő az atompályákat és a mole-kulapályákat. Ezt az módszert nevezzük LCAO-közelítésnek (Eng. linear combination of atomic orbitals). A híres GAUSSIAN programcsomag neve onnan származik, hogy GTO függvényeket használ bázisfüggvények gyanánt. Samuel Francis BOYS (1911-1972) angol kvantumkémikus érdeme a GAUSS-pályák bevezetése és az első kvantumkémiai program-csomag létrehozása [S.F. Boys: Proc. R. Soc. London, Ser. A, 200, 532, (1950)]. Ez a tett szinte forradalmasította a kvantumkémiát. N.C. HANDY, J.A. POPLE és I.S. SHAVITT a múlt század végén egy cikkben méltatta BOYS munkásságát: Samuel Francis Boys, J. Phys. Chem., 100, 6007 (1996).

A lényeg az, hogy a többcentrumú molekuláris integrálokat sokkal könnyebb GAUSS-pályákkal kiszámítani, mint SLATER-pályákkal. Ez annak köszönhető, hogy két különböző atomon centrált GAUSS-pálya szorzata – egy kontstans faktortól eltekintve – egy harmadik centrumon lokalizált GAUSS-pálya. A harmadik centrum a két atomot összekötő egyenes szakaszon helyezkedik el. A SLATER-pályákról ugyanez a tény nem mondható el. Az A atomon centrált ún. primitív GAUSS-pálya DESCARTES-féle alakja (Eng. primitive cartesian gaussian):

2, , ; exp ,GTO l m n

A l m n A A A A A Ag N x y z r r

ahol AN a normálási tényező (Eng. normalization constant), A r r A az A atom

( , , )x y zA A AA helyétől az ( , , )x y zr pontba mutató vektor, a GAUSS-pálya pályakite-

vője (exponense, Eng. orbital exponent) és 0, , .l m n A ( , , )l m nλ rendezett számhár-

mast impulzusmomentumnak, a l m n λ számot pedig impulzusmomentum-indexnek

nevezzük. A λ számértékétől függően (0, 1, 2, ...) beszélünk s, p, d, ... primitív GAUSS-

függvényekről. A normálási faktor értékének a meghatározásához a következő integrált kell kiszámítanunk:

22exp ,l m n

A A A Ax y z dx dy dz

r

ahol az integrálást a teljes térre kell végrehajtanunk. Az AN segítségével a Ag GTO-t nor-málni tudjuk:

2 1.Ag dx dy dz

Míg a STO-k a hidrogénszerű atompályákhoz hasonló tulajdonságokkal rendelkeznek, addig a GTO-k jelentősen eltérnek azoktól. Ennek következtében egy atompálya közelítésére álta-lában elég egy STO-t használni. GTO-ból viszont sokkal több kell. Az első néhány normált GTO függvény (az A indexet elhagyva és az r r jelölést bevezetve):

Page 198: Computational Chemistry

Tasi Gyula: Számítógépes kémia

198

3 4

22exp ;sg r

1 45

23

128exp ;xg x r

1 45

23

128exp ;yg y r

1 45

23

128exp .zg z r

Az előzőeknek megfelelően tehát 1 STO közelítésére több primitív GTO lineáris kombiná-cióját kell alkalmaznunk. Így jutunk el az összetett (kontrahált) GTO bázisfüggvény (CGTO, Eng. contracted GTO) fogalmához:

1

; .k

STO CGTOi i

i

c g

r

ahol a STO pályakitevője, k a kontrakció mértéke és a ci skalárok az ún. expanziós koefficiensek. Természetesen egy adott szimmetriájú STO előállításához ugyanolyan szim-metriájú primitív GTO-kat kell alkalmaznunk. A SLATER-pálya DESCARTES-féle alakja csak a radiális részben tér el a GAUSS-pályáétól:

, , ( ; ) exp .STO l m nn l m A A A A A AN x y z r r

A legegyszerűbb normált STO kifejezése (elhagyva az A indexet):

1 23

1 ( ; ) exp .STOs r r

Legyen a feladatunk a 1STOs függvény különböző exponensű gs függvények lineáris kombi-

nációjával való közelítése!

1 1 ,1

kSTO CGTOs s i s i

i

c g

A különböző k értékekhez tartozó { }ic és { }i paramétereket úgy kell meghatározni, hogy a kontrahált GTO függvény a lehető legjobban megközelítse a kérdéses STO függvényt. A kérdéses paraméterek optimalizálásával sok cikk foglalkozik a szakirodalomban. Itt csak néhányat említünk meg közülük. R.F. STEWART a legkisebb négyzetek módszere szellemében a következő függvény minimalizálásával határozta meg a paramétereket [R.F. Stewart: Small Gaussian Expansions of Atomic Orbitals, J. Chem. Phys., 50, 2485 (1969)]:

2 2

1 1 11 .STO CGTO CGTOs s sS dxdydz dxdydz

Látható, hogy STEWART a LAGRANGE-féle multiplikátoros módszerrel (MK: 2-7.) mellék-feltételként vette figyelembe a CGTO normáltságát: a multiplikátor. A kapott CGTO-t STO-kG módon jelöljük. W.J. HEHRE, R.F. STEWART és J.A. POPLE egy J. Chem. Phys. cikkben közölte a STO-2G, ..., STO-6G megoldásokat [J. Chem. Phys., 51, 2657 (1969)].

Page 199: Computational Chemistry

Tasi Gyula: Számítógépes kémia

199

Érdemes megemlíteni, hogy elegendő csak 1 esetén meghatározni a paramétereket. Tetszőleges 1 értékre ugyanis könnyen meghatározhatjuk a megoldást egyszerű skálázással:

3 21 1( ; 1) ( ;1).STO STO

s sr r

A probléma megoldására itt egy másik utat választunk. Először is alakítsuk át az előbbi – mellékfeltétel melletti – minimalizálási problémát egyszerű mellékfeltétel nélküli maxi-malizálási feladattá. Tekintsük a kérdést általánosan: egy [ , ]-ona b folytonos ( )F x függvényt ( ( ) [ , ]F x C a b ) akarunk illeszteni egy másik – szintén az [ , ]-ona b folytonos ( ; )f x c függvénnyel ( ( ; ) [ , ]f x C a bc ). A pontos vessző azt jelöli, hogy az ( ; )f x c függvény parametrikusan függ a c vektortól. A legkisebb négyzetek módszere értelmében úgy választ-juk meg a c paramétervektort, hogy az

2( ) ( ) ( ) ( ; )

b

a

S w x F x f x dx c c

határozott integrál minimális. A ( ) 0w x függvényt súlyfüggvények nevezzük. A súly-függvény segítségével az intervallum különböző pontjait különböző mértékben tudjuk figye-lembe venni. Természetesen ( ) 1w x is választható. Az ( )S c minimumának szükséges felté-tele:

( )0, ( 1, 2, , ),

j

Sj n

c

c

azaz

( ; ) ( ; )( ) ( ) ( ; ) 0, ( 1,2, , ).

b

j ja

f x f xw x F x f x dx j n

c c

c cc

Tegyük fel, hogy a függvényeink négyzetesen integrálhatók az [ , ]-ona b :

2 ;b

a

w f dx

2 .b

a

w F dx

Deriváljuk ezek közül az elsőt cj szerint:

0.b

ja

fw f dx

c

Majd a kapott eredményt vegyük figyelembe a fenti egyenleteinkben:

0, ( 1,2, , ).b b b

j j j ja a a

f f fw F f dx w F dx wF f dx j n

c c c c

Ez azt jelenti, hogy az ( )S c függvény minimuma esetén az b

a

wF f dx

Page 200: Computational Chemistry

Tasi Gyula: Számítógépes kémia

200

határozott integrál stacionáriussá válik. A kérdéses integrált az f és az F függvények átfedési integráljának nevezzük. Lássuk be, hogy az átfedési integrál stacionárius pontja maximum!

2 2 2 2 2( ) 2 2 .b b b b b

a a a a a

S w F f dx wF w f F w f dx wF dx w f dx w f F dx c

Az első két tag konstans és pozitív (lásd az előzőekben), így az ( )S c akkor lesz minimális, ha az átfedési integrál maximális. Tehát az ( )S c függvénynek akkor van minimuma, amikor az átfedési integrálnak maximuma. Ha az ( ; )f x c függvény egy n-edfokú polinom:

0

( ; ) ,n

kk

k

f x c x

c

akkor polinomiális illesztésről beszélünk. Ennek megfelelően az 1s STO függvény 1s CGTO függvénnyel való illesztésekor a

következő átfedési integrált kell maximalizálnunk ( ( , , ) 1, 1w x y z ):

1 1( , ) .STO CGTOs sS dxdydz

α c

Először tekintsük azt az egyszerű esetet, amikor egy primitív GTO-val történik az illesztés (STO-1G). Mivel a probléma gömbszimmetriával rendelkezik, térbeli polárkoordináta-rend-szerre való áttéréssel a hármasintegrált egy egyszeres integrálra tudjuk redukálni:

2

2 2

1 2 3 4

1 1

1 2 3 4 1 2 3 422 2

0 0 0 0

1 2( )

1 2 1 2sin 4 .

STO CGTO r rs s

r r r r

S dxdydz e e dxdydz

dr r e e d d r e e dr

Az S függvény értékét kell maximalizálnunk az szerint. Mellékfeltételünk pedig nincs, mivel a priori normált GTO-t használunk fel az illesztésre. Tegyük fel, hogy az S kifeje-zésében szereplő integrál értékét nem tudjuk analitikusan megadni: numerikusan kell azt meghatároznunk. A következőkben – az eredeti feladatunk megoldása érdekében – numeri-kus integrálással is kell foglalkoznunk egy kicsit.

A numerikus integrálás (kvadratúra) története kb. egyidős a matematikai analízis törté-netével. A kvadratúra módszerek azon alapulnak, hogy az integrálási tartományon belül fel-vett pontokban (osztópontok) számított integrandusz értékeket összeadjuk. A cél az, hogy a lehető legkevesebb függvénykiértékelés mellett, a lehető legpontosabban határozzuk meg az integrál értékét.

Először is tekintsük az :f egyváltozós függvényt, melynek az integrálját az [ , ]-bana b kívánjuk meghatározni:

( ) .b

a

I f x dx

Az a és a b végpontok között vegyünk fel egy ekvidisztáns abszcissza sorozatot:

1 2 3 1( , , , , , ),n nx a x x x x b

Page 201: Computational Chemistry

Tasi Gyula: Számítógépes kémia

201

ahol 1i ix x h ( 1,2, , 1i n és h = konstans). Az ( )f x függvény értékét az ix pontban jelölje if ( ( )i if f x ). Zártnak nevezzük az integrálási formulát, ha az a végpontokban számított függvényértékeket felhasználja. Néha azonban előfordul, hogy a végpontokban nehéz kiszámítani a függvény értékét. Ebben az esetben csak az a és a b pontok közötti abszcisszákat szeretnénk figyelembe venni az integrálás során. Az ilyen formulákat nyitott formuláknak nevezzük. A trapéz-szabály következőképpen közelíti az integrál értékét:

2

1

1 2

1 1( ) .

2 2

x

x

f x dx h f f

Ez a formula ún. kétpontos formula, s egzakt elsőfokú polinomig. A SIMPSON-féle formula hárompontos formula és harmadfokú polinomig egzakt:

2

1

1 2 3

1 4 1( ) .

3 3 3

x

x

f x dx h f f f

Ha a trapéz-formulát ( 1)-szern alkalmazzuk az 1 2( , ),x x 2 3( , ), ,x x 1( , )n nx x interval-lumokra, és összeadjuk az eredményeket, akkor az ún. zárt összetett trapéz-formulát kapjuk:

1

1 2 3 1 2

1 1 1( ) O .

2 2

nx

n n

x

f x dx h f f f f fn

Az utolsó tag azt fejezi ki, hogy az elkövetett hiba 21 -teln arányos. Ha most a SIMPSON-szabályt alkalmazzuk egymásután, akkor az ún. zárt összetett SIMPSON-féle formulát kapjuk:

1

1 2 3 4 2 1 4

1 4 2 4 2 4 1 1( ) O .

3 3 3 3 3 3 3

nx

n n n

x

f x dx h f f f f f f fn

A 4 3 és a 2 3 faktorok egymás utáni váltakozása figyelhető meg az intervallum belsejében. Írjunk egy FORTRAN rutint a zárt összetett trapéz-formula alkalmazására! Mivel nem tudjuk előre, hogy milyen finomságú beosztást kell alkalmaznunk egy adott pontosság eléréséhez, az integrál értékét iteratíve addig számítjuk, amíg két egymás utáni érték közötti különbség elegendően kicsivé válik:

************************************************************************ subroutine ctrpz(a,b,s,i) ************************************************************************ implicit real*8(a-h,o-z) implicit integer(i-n) parameter (eps=1.0d-8,tol=1.d-8,itmax=30) s0=-1.d20 do i=1,itmax if(i.eq.1) then s=0.5d0*(b-a)*(func(a)+func(b)) else ii=2**(i-2) del=(b-a)/dble(ii) x=a+0.5d0*del sum=0.d0 do j=1,ii sum=sum+func(x) x=x+del end do

Page 202: Computational Chemistry

Tasi Gyula: Számítógépes kémia

202

s=0.5d0*(s+del*sum) endif if(dabs(s-s0).le.eps*dabs(s0)) return if(dabs(s).le.tol.and.dabs(s0).le.tol) return s0=s end do write(*,*) 'Too many steps in subroutine ctrpz' stop end

A kérdéses rutint ctrpz.f néven tároljuk. A zárt összetett trapéz-formulából például úgy kaphatunk nyitott formulát, ha az első és az utolsó intervallumon számított integrál értékét kövekezőképpen helyettesítjük:

2

1 1

2 1( ) ; ( ) .n

n

xx

n

x x

f x dx hf f x dx hf

Ennek megfelelően kapjuk, hogy

1

2 3 2 1 2

3 3 1( ) O .

2 2

nx

n n

x

f x dx h f f f fn

Ez a mindkét végén nyitott összetett trapéz-formula. Készítsünk egy FORTRAN rutint a nyitott összetett trapéz-formula alkalmazására is (otrpz.f)!

************************************************************************ subroutine otrpz(a,b,s,i) ************************************************************************ implicit real*8(a-h,o-z) implicit integer(i-n) parameter (eps=1.0d-8,tol=1.d-8,itmax=50) s0=-1.d20 do i=1,itmax if(i.eq.1) then s=(b-a)*func(0.5d0*(a+b)) else ii=3**(i-2) del=(b-a)/(3.d0*dble(ii)) del2=2.d0*del x=a+0.5d0*del sum=0.d0 do j=1,ii sum=sum+func(x) x=x+del2 sum=sum+func(x) x=x+del end do s=(s+(b-a)*sum/dble(ii))/3.d0 endif if(dabs(s-s0).le.eps*dabs(s0)) return if(dabs(s).le.tol.and.dabs(s0).le.tol) return s0=s end do write(*,*) 'Too many steps in subroutine otrpz' stop end

Page 203: Computational Chemistry

Tasi Gyula: Számítógépes kémia

203

Hogyan tudjuk alkalmazni a kapott formuláinkat impropriusz integrálok numerikus számí-tására? Tegyük fel, hogy a következő integrál értékét akarjuk numerikusan meghatározni:

0

( ) .I f x dx

Az integrált úgy kell transzformálnunk, hogy az eredeti [0, ) végtelen intervallum helyett egy véges intervallumot kapjunk. Hajtsuk végre a ,xt e azaz az lnx t helyettesítést. Ekkor kapjuk, hogy

0

1

0 0

( ) ( ln ) ( ln ) .t e

t e

dt dtI f x dx f t f t

t t

Ezek után a fenti ( )S függvényben szereplő

22

0

r rr e e dr

integrál numerikus számítása nem okoz nehézséget. Végezzük el most az 1s STO függvény illesztését 1s GTO függvények segítségével! FORTRAN nyelven írjuk meg a főprogramot, valamint a numerikus integráláshoz szükséges függvényeket!

************************************************************************ program main ************************************************************************ implicit real*8(a-h,o-z) implicit integer(i-n) parameter (maxg=10,np=2*maxg) common /data1/ alpha(maxg),c(maxg),zeta common /data2/ ng dimension p(np),sov(maxg,maxg) open(1,file='stong.out',status='unknown') open(2,file='stong.inp',status='unknown') read(2,*) ng do i=1,2*ng read(2,*) p(i) end do zeta=1.d0 ndim=2*ng ftol=1.0d-14 write(*,*) 'Initial values of the parameters:' write(*,'(f15.8)') (p(i),i=1,ndim) do i=1,ng p(i)=dsqrt(p(i)*p(i)) p(i)=dlog(p(i)) end do write(*,'(a,f20.16)') 'Initial value of the overlap: ',-fn(p) call smplx(p,ndim,iter,fopt,ftol,nfeval) do i=1,ng alpha(i)=dexp(p(i)) c(i)=p(ng+i) end do do i=1,ng-1 do j=i+1,ng sov(i,j)=(4.d0*alpha(i)*alpha(j))**0.75/ 1 (alpha(i)+alpha(j))**1.5 end do end do

Page 204: Computational Chemistry

Tasi Gyula: Számítógépes kémia

204

sn=0.d0 do i=1,ng sn=sn+c(i)*c(i) end do do i=1,ng-1 do j=i+1,ng sn=sn+2.d0*c(i)*c(j)*sov(i,j) end do end do sn=dsqrt(sn) do i=1,ng p(i)=dexp(p(i)) p(ng+i)=c(i)/sn end do write(*,*) 'Optimized gaussian orbital exponents:' write(*,'(f15.8)') (p(i),i=1,ng) write(1,'(f15.8)') (p(i),i=1,ng) write(*,*) 'Optimized gaussian expansion coefficients:' write(*,'(f15.8)') (p(ng+i),i=1,ng) write(1,'(f15.8)') (p(ng+i),i=1,ng) write(*,'(a,f20.16)') 'Maximum value of the overlap: ',-fopt write(1,'(a,f20.16)') 'Maximum value of the overlap: ',-fopt write(*,'(a,d10.3)') 'Tolerance: ',ftol write(1,'(a,d10.3)') 'Tolerance: ',ftol write(*,'(a,i12)') 'Number of function evaluations: ',nfeval write(1,'(a,i12)') 'Number of function evaluations: ',nfeval end ************************************************************************ function fn(p) ************************************************************************ implicit real*8(a-h,o-z) implicit integer(i-n) parameter (maxg=10,np=2*maxg) common /data1/ alpha(maxg),c(maxg),zeta common /data2/ ng dimension p(np),sov(maxg,maxg) do i=1,ng alpha(i)=dexp(p(i)) c(i)=p(ng+i) end do do i=1,ng-1 do j=i+1,ng sov(i,j)=(4.d0*alpha(i)*alpha(j))**0.75/ 1 (alpha(i)+alpha(j))**1.5 end do end do sn=0.d0 do i=1,ng sn=sn+c(i)*c(i) end do do i=1,ng-1 do j=i+1,ng sn=sn+2.d0*c(i)*c(j)*sov(i,j) end do end do sn=dsqrt(sn) do i=1,ng c(i)=c(i)/sn end do

Page 205: Computational Chemistry

Tasi Gyula: Számítógépes kémia

205

a=0.d0 b=1.d0 call otrp(a,b,s,nstep) fn=-s return end ************************************************************************ function func(t) ************************************************************************ implicit real*8(a-h,o-z) implicit integer(i-n) parameter (maxg=10) common /data1/ alpha(maxg),c(maxg),zeta common /data2/ ng data pi/3.141592654d0/ x=-dlog(t) f1=dsqrt(zeta**3/pi)*dexp(-zeta*x) f2=0.d0 do i=1,ng f2=f2+c(i)*(2.d0*alpha(i)/pi)**0.75*dexp(-alpha(i)*x**2) end do func=4.d0*pi*(x**2)*f1*f2/t return end

A 1CGTOs normálásához csak a következő integrálra, ugyanazon az atomon centrált két külön-

böző exponensű primitív GTO átfedési integráljára van szükségünk:

1,2 ,1 1 ,2 2

3 4 3 42 21 2

1 2

33 4 3 421 2

1 2

3 2 3 4 3 43 4 3 41 21 2

3 21 2 1 2

( ; ) ( ; )

2 2exp exp

2 2exp

2 22 2,

s sI g g dx dy dz

r r dx dy dz

x dx

r r

hiszen

220

2 1 !!( ).

2n x

n

nx e dx n

Az utóbbi formulát teljes indukcióval igazolhatjuk. A formulában szereplő (2 1)!!n ún. szemifaktoriális (Eng. double factorial) értéke: 13 (2 3) (2 1).n n Hajtsuk végre például a 1

CGTOs normálását abban az esetben, amikor az két primitív GTO lineárkombinációjából áll!

Tegyük fel, hogy a ,1sg és a ,2sg GTO-k normáltak azonban az összegük nem az:

1 1 ,1 2 ,2 ;CGTOs s sc g c g

1 1 1.CGTO CGTOs sI dx dy dz

Page 206: Computational Chemistry

Tasi Gyula: Számítógépes kémia

206

Határozzuk meg az I integrál értékét:

1 1

2

1 ,1 2 ,2

2 2 2 21 ,1 2 ,2 1 2 ,1 ,2

2 21 2 1 2 1,2

2

2 .

CGTO CGTOs s

s s

s s s s

I dx dy dz

c g c g dx dy dz

c g dx dy dz c g dx dy dz c c g g dx dy dz

c c c c I

Az I integrál értékének az ismeretében az új normált 1CGTOs függvényünk a következő lesz:

1 1 2

1 ,1 ,21 2 1 22 2 2 21 2 1 2 1,2 1 2 1 2 1,2

(régi)(új)= .

I 2 2

CGTOCGTO ss s s

c cg g

c c c c I c c c c I

Az előzőekben bemutatott programrészlet kapja a sto1s.f fájlnevet! Most készítsük el a programunkat a Portland Group FORTRAN 90-es fordító programjával (pgf90) Linux operációs rendszer alatt! A következő utasítással tudjuk létrehozni a futtatható sto1s.exe programot:

>pgf90 –o sto1s.exe –fast sto1s.f smplx.f otrpz.f

A –fast opció révén közöljük a fordító programmal, hogy az adott számítógépen a lehető leggyorsabb végrehajtható programot szeretnénk előállítani. A program futtatásához szüksé-ges kiindulási adatokat a stong.inp fájlba kell beírnunk. Az ng változó értéke kerül az első sorba. Ez adja meg a CGTO függvény kontraháltságának a mértékét, azaz, hogy mennyi primitív GTO összegével kívánjuk közelíteni a STO-t. Az első sor utáni sorokba kerülnek először a kiindulási paraméterek, majd a megfelelő c paraméterek következnek. A számítás eredményét a program a stong.out nevű fájlba írja ki. A sto1s.exe program futtatásával határozzuk meg az 1s STO függvény STO-1GSTO-6G előállítását! A következő ábra az első három közelítést mutatja:

Az ábra világosan mutatja a GTO függvények kedvezőtlen viselkedését 0-nálr és nagy r értékeknél: 0r esetén a GTO függvény – a STO-tól eltérően – zérus meredekséggel rendel-

Page 207: Computational Chemistry

Tasi Gyula: Számítógépes kémia

207

kezik, továbbá nagy r értékeknél meredekebben csökken, mint a STO. A részletes számítási eredmények:

STO-NG bázis Exponensek Expanziós koefficiensek max S(,c)

STO-1G 0.27094982 1.00000000 0.978404392307

STO-2G 0.15162330 0.85181880

0.67891359 0.43012844

0.998419702833

STO-3G 0.10981529 0.40576048 2.22759691

0.44462229 0.53533564 0.15433393

0.999834739316

STO-4G 0.08801841 0.26520259 0.95461457 5.21682235

0.29162411 0.53284631 0.26014222 0.05675268

0.999978118674

STO-5G 0.07445346 0.19757544 0.57865668 2.07174680 11.30574559

0.19357755 0.48257138 0.33181124 0.11353959 0.02214034

0.999996557963

STO-6G 0.06510814 0.15808053 0.40706802 1.18495682 4.23551917 23.10029932

0.13032356 0.41647011 0.37057446 0.16855240 0.04936640 0.00916485

0.999999381454

A táblázatban levő adatok megegyeznek az irodalomban közöltekkel [W.J. Hehre et al.: Self-Consistent Molecular-Orbital Methods. I. Use of Gaussian Expansions of Slater-Type Atomic Orbitals, J. Chem. Phys., 51, 2657 (1969).]!

Az 16.1 feladatban az 1s STO függvényt 7-12 GTO függvény lineáris kombinációjával kell illesztenünk. A paraméterek száma: 14-24. A CPU idők ezekben az esetekben már jelen-tősek lesznek, így érdemes elgondolkodni azon, hogy hogyan tudjuk csökkenteni a számítási időt. A legkézenfekvőbb dolog a kvadratúra eliminálása a módszerünkből a kérdéses integrál értékének a meghatározásával:

21

2 45 2

0

1 12 1 2 1 erf ,

8 2r rr e e dr e

ahol az erf( )x függvény az ún. hibafüggvény (Eng. error function):

2

0

2erf( ) .

xtx e dt

A hibafüggvénnyel szoros kapcsolatban van a komplementer hibafüggvény (Eng. complement error function):

Page 208: Computational Chemistry

Tasi Gyula: Számítógépes kémia

208

erfc( ) 1 erf( ).x x

A legtöbb FORTRAN fordító rendelkezik a hibafüggvény számítására szolgáló könyvtári rutinnal. Ha nem, akkor nekünk kell azt is elkészítenünk. Írjuk át az illesztési programunkat úgy, hogy a numerikus integrálási részt elhagyjuk, és az integrál értékét az előző formulának megfelelően számítjuk! Mit tapasztalunk az újabb programunk futtatásakor?

A HF SCF-MO módszer fizikai és matematikai részletei megtalálhatók például A. SZABO és N.S. OSTLUND ma már klasszikusnak mondható könyvében: Modern Quantum Chemistry: Introduction to Advanced Electronic Structure Theory, McGraw-Hill, New York (1989). A könyvben egy kis FORTRAN program forráskódját is közlik, mellyel HF SCF-MO számí-tásokat lehet végezni két elektront tartalmazó kétatomos molekulákra. (Persze, ilyen moleku-la azért nem sok van!) A könyv a szükséges molekuláris integrálok számításával is foglal-kozik egy külön fejezetben. A programmal adott mag-mag távolság esetén tudunk elektron-energiát és teljes energiát számítani. Az utóbbit úgy kapjuk meg az előbbiből, hogy hozzá-adjuk a mag-mag taszítási energiát. A számításokhoz STO-[1-3]G bázisokat használhatunk a programban. Gépeljük be a könyvből a kérdéses forráskódot, s végezzünk HF/STO-3G számítást a H2 molekulára! A forráskód begépeléséhez és használatához a könyv megvétele révén jogunk van! Legyen a forráskód neve hfrh.f; a belőle készített futtatható programé pedig hfrh.exe! Nézzük meg a HF/STO-3G számítási eredményt a H2 mole-kulára R = 1.40 bohr távolság esetén!

STO-3G FOR ATOMIC NUMBERS 1.00 AND 1.00 R ZETA1 ZETA2 S12 T11 1.400000 1.240000 1.240000 0.659319 0.760033 T12 T22 V11A V12A V22A 0.236455 0.760033 -1.226615 -0.597418 -0.653828 V11B V12B V22B V1111 V2111 -0.653828 -0.597418 -1.226615 0.774608 0.444109 V2121 V2211 V2221 V2222 0.297029 0.569678 0.444109 0.774608 THE S ARRAY 1 2 1 0.1000000000D+01 0.6593190093D+00 2 0.6593190093D+00 0.1000000000D+01 THE X ARRAY 1 2 1 0.5489339075D+00 0.1211465502D+01 2 0.5489339075D+00 -0.1211465502D+01 THE H ARRAY 1 2 1 -0.1120410766D+01 -0.9583811002D+00 2 -0.9583811002D+00 -0.1120410766D+01 ( 1 1 1 1 ) 0.774608 ( 1 1 1 2 ) 0.444109 ( 1 1 2 1 ) 0.444109

Page 209: Computational Chemistry

Tasi Gyula: Számítógépes kémia

209

( 1 1 2 2 ) 0.569678 ( 1 2 1 1 ) 0.444109 ( 1 2 1 2 ) 0.297029 ( 1 2 2 1 ) 0.297029 ( 1 2 2 2 ) 0.444109 ( 2 1 1 1 ) 0.444109 ( 2 1 1 2 ) 0.297029 ( 2 1 2 1 ) 0.297029 ( 2 1 2 2 ) 0.444109 ( 2 2 1 1 ) 0.569678 ( 2 2 1 2 ) 0.444109 ( 2 2 2 1 ) 0.444109 ( 2 2 2 2 ) 0.774608 THE P ARRAY 1 2 1 0.0000000000D+00 0.0000000000D+00 2 0.0000000000D+00 0.0000000000D+00 START OF ITERATION NUMBER = 1 THE G ARRAY 1 2 1 0.0000000000D+00 0.0000000000D+00 2 0.0000000000D+00 0.0000000000D+00 THE F ARRAY 1 2 1 -0.1120410766D+01 -0.9583811002D+00 2 -0.9583811002D+00 -0.1120410766D+01 ELECTRONIC ENERGY = 0.000000000000D+00 THE F' ARRAY 1 2 1 -0.1252798199D+01 0.0000000000D+00 2 0.0000000000D+00 -0.4756052454D+00 THE C' ARRAY 1 2 1 0.1000000000D+01 0.0000000000D+00 2 0.0000000000D+00 -0.1000000000D+01 THE E ARRAY 1 2 1 -0.1252798199D+01 0.0000000000D+00 2 0.0000000000D+00 -0.4756052454D+00 THE C ARRAY 1 2 1 0.5489339075D+00 -0.1211465502D+01 2 0.5489339075D+00 0.1211465502D+01 THE P ARRAY 1 2 1 0.6026568697D+00 0.6026568697D+00 2 0.6026568697D+00 0.6026568697D+00 DELTA(CONVERGENCE OF DENSITY MATRIX) = 0.602657

Page 210: Computational Chemistry

Tasi Gyula: Számítógépes kémia

210

START OF ITERATION NUMBER = 2 THE G ARRAY 1 2 1 0.7548736457D+00 0.3644955162D+00 2 0.3644955162D+00 0.7548736457D+00 THE F ARRAY 1 2 1 -0.3655371207D+00 -0.5938855840D+00 2 -0.5938855840D+00 -0.3655371207D+00 ELECTRONIC ENERGY = -0.183100088301D+01 THE F' ARRAY 1 2 1 -0.5782026839D+00 0.0000000000D+00 2 0.0000000000D+00 0.6702706332D+00 THE C' ARRAY 1 2 1 0.1000000000D+01 0.0000000000D+00 2 0.0000000000D+00 -0.1000000000D+01 THE E ARRAY 1 2 1 -0.5782026839D+00 0.0000000000D+00 2 0.0000000000D+00 0.6702706332D+00 THE C ARRAY 1 2 1 0.5489339075D+00 -0.1211465502D+01 2 0.5489339075D+00 0.1211465502D+01 THE P ARRAY 1 2 1 0.6026568697D+00 0.6026568697D+00 2 0.6026568697D+00 0.6026568697D+00 DELTA(CONVERGENCE OF DENSITY MATRIX) = 0.000000 CALCULATION CONVERGED ELECTRONIC ENERGY = -0.183100088301D+01 TOTAL ENERGY = -0.111671516872D+01

A számításhoz minimális bázist, 2 darab 1s STO-3G bázisfüggvényt használtunk (lásd a 4. projektet is). A 2 elektront ugyanazon az MO-n helyeztük el ellentétes spinnel, s egyetlenegy betöltetlen (virtuális) MO-nk volt. A valós és szimmetrikus mátrixok ennek megfelelően másodrendűek. A FOCK-mátrix általánosított sajátértékegyenletét iteratíve oldjuk meg (lásd a 3. projektet). Az SCF-eljárás minden lépése pontosan nyomon követhető az outputban. A rendszer nagy szimmetriája és a bázisfüggvények kis száma miatt az eljárás a 2. iteráció után

Page 211: Computational Chemistry

Tasi Gyula: Számítógépes kémia

211

sikeresen befejeződik. Az adott 1.40 bohr-os mag-mag távolságnál a molekula elektron- és teljes energiája:

1.8310 au;

11.1167 au .

el

tot el rep el

E

E E E ER

Az Erep egzakt, az Eel azonban nem: jóval felette van az egzakt energiának. A hidrogénatomra ugyanezen az bázison 0.4666 au energia adódik. Ennek megfelelően a H2 molekula disszo-ciációs energiája a kérdéses elméleti szinten:

0 2 0.4666 1.1167 0.1835 au 4.99 eV.E

Ez az érték nagyon jól megegyezik a 4.75 eV-os kísérleti értékkel. A jó egyezés tulajdonkép-pen annak köszönhető, hogy a hibák az energiákban körülbelül azonosak, így az energiák kivonásakor jó közelítéssel kiejtik egymást. A kvantumkémiában általában relatív energiák érdekelnek minket. Ezeket sokkal pontosabban tudjuk számítani, mint az abszolút értékeket. Nagy pontosságú számítások végzéséhez kifinomult módszerekre, programokra és komoly számítógépes háttérre van szükség. A formaldehid-molekula protonaffinitásának és képződéshőjének a meghatározására született projekt jó példát szolgáltat erre: Czakó, G., Nagy, B., Tasi, G., Somogyi, Á., Šimunek, J., Noga, J., Braams, B.J., Bowman, J.M., Császár, A.G., Proton Affinity and Enthalpy of Formation of Formaldehyde, International Journal of Quantum Chemistry, 109, 2393 (2009).

Az egyetlenegy elektront tartalmazó hidrogénatomra és 2H molekulaionra a hfrh.exe programmal közvetlenül nem tudunk számítást végezni. A 2H molekulaion a kémiai kötés modell-vegyülete. A molekulában egy elektron létesíti a kémiai kötést a két proton között. Mivel csak egy elektron van, elektron-elektron taszítással (kölcsönhatással) nem kell számol-ni. Ebben az esetben a végtelen bázisra vonatkozó HF SCF-MO megoldás (HFL, Eng. HF limit) az egzakt nemrelativisztikus energiát szolgáltatja a BORN-OPPENHEIMER-közelítésen belül. A 2H molekulaionra és különböző izotopomerjeire például a következő cikkben talál-hatók további információk és irodalmi hivatkozások: Fábri, C., Czakó, G., Tasi, G., Császár, A.G., Adiabatic Jacobi corrections on the vibrational energy levels of H2

+ isotopologues, Journal of Chemical Physics, 130, 134314 (2009).

A hfrh.f kód bővítésére nagyon sok lehetőség van: (1) lehetővé tehetjük 1s STO-[4-12]G bázisfüggvények használatát; (2) az egyelektron- és a kételektron-integrálok számítását kiterjeszthetjük p-típusú függvényekre is [C.A: Baxter, D.B. Cook: Explicit formulae for integrals of s and p type GTFs, Electronic Journal of Theoretical Chemistry, 2, 66 (1997)]; (3) általános rekurziós formulákat is alkalmazhatunk a molekuláris integrálok számítására [S. Obara, A. Saika: Efficient recursive computation of molecular integrals over Cartesian Gaussian functions, Journal of Chemical Physics, 84, 3963 (1986)] lehetővé téve ezzel tetszőleges szimmetriájú bázisfüggvények használatát; (4) implementálhatjuk a JACOBI-féle diagonalizációs eljárást a FOCK-mátrix diagonalizációjára (lásd a 3. projektet); (5) az SCF-eljárás konvergenciájának gyorsítására, biztosítására különböző extrapolációs módszereket építhetünk be; (6) a szimplex-eljárás meghívásával molekulák geometriáját is optimalizál-hatjuk; (7) DESCARTES-koordináták mellett Z-mátrixot is alkalmazhatunk (lásd az 1. projek-

Page 212: Computational Chemistry

Tasi Gyula: Számítógépes kémia

212

tet) és a molekula szimmetriáját is rögzíthetjük a geometriai optimalizálás során; (8) rekur-ziós formulák vezethetők le a molekuláris integrálok deriváltjainak számítására is, amivel hozzájuthatunk például a teljes energia analitikus gradiensvektorához; (9) normálkoordináta-analízis implementálásával molekulák rezgőmozgását is tanulmányozhatjuk, stb.

Az előző paragrafusban felsorolt fejlesztési lehetőségeknél is többet építettünk be a DGB programba [G. Tasi, A.G. Császár: Hartree-Fock-limit energies and structures with a few dozen distributed Gaussians, Chemical Physics Letters, 438, 139 (2007)]. A program lehető-séget biztosít térben eloszlatott (Eng. distributed) GTF bázisfüggvények használatára is. Ebből származik a program neve: Distributed Gaussian Basis program. Az eloszlatott GTF bázisfüggvények centrumai szabadon mozoghatnak a térben. Az optimális pozíciókat a rend-szer teljes energiájának a minimalizálásával határozzuk meg. Ha ezen túl a bázisfüggvények pályakitevőit is optimalizáljuk, akkor teljes variációs HF SCF-MO számításokat tudunk végezni.

Először hajtsunk végre a H2 molekulára a DGB programmal egy olyan HF/STO-3G számítást, amelyben a kontrahált pályák skálafaktorait is optimalizáljuk! A mag-mag távolsá-got tartsuk 1.40 bohr értéken!

******************************************** * * * DGB-RHF * * * * A fully variational ab initio * * Hartree-Fock-Roothaan-Hall program * * with distributed Cartesian Gaussians * * for atoms and molecules * * written by * * Dr. Tasi, Gyula * * 2005-2009 * * University of Szeged * * Szeged, Hungary * ******************************************** H2 molecule: STO-3G Initial molecular geometry (in angstroms): 1 0.0000000000 0 0.0000000000 0 0.0000000000 0 1 0.7408480916 0 0.0000000000 0 0.0000000000 0 Initial molecular geometry (in au): 1 0.0000000000 0 0.0000000000 0 0.0000000000 0 1 1.4000000000 0 0.0000000000 0 0.0000000000 0 Charge of the molecule = 0 Number of electrons = 2 Number of occupied MOs = 1 Number of basis functions = 2 Number of parameters = 1 ---------------------------------- Calculation of the initial Hessian ---------------------------------- -9.9999999999988987E-004 -1.0074904850351980E-002 ---------------------------------------------------- Elements of the Approximate Diagonal Inverse Hessian

Page 213: Computational Chemistry

Tasi Gyula: Számítógépes kémia

213

---------------------------------------------------- 0.0992565205184001 ---------------------------------------------------- BFGS optimization of geometry and/or atomic orbitals ---------------------------------------------------- --Saving parameters— Iteration # 1: 1 -1.118577341122 0.1119989 0.0 0.0 --Saving parameters— Iteration # 1: 2 -1.119217305059 0.0033387 0.0 0.0 --Saving parameters— Iteration # 1: 3 -1.119217882578 0.0000375 0.0 0.0 --Saving parameters— Iteration # 1: 4 -1.119217882632 0.0000187 0.0 0.0 --Saving parameters— Iteration # 1: 5 -1.119217882646 0.0000094 0.0 0.1 --Saving parameters— Iteration # 1: 6 -1.119217882650 0.0000047 0.0 0.1 --Saving parameters— Iteration # 1: 7 -1.119217882650 0.0000023 0.0 0.1 --Saving parameters— Iteration # 1: 8 -1.119217882651 0.0000012 0.0 0.1 --Saving parameters— Iteration # 1: 9 -1.119217882651 0.0000006 0.0 0.1 --Saving parameters— Iteration # 1: 10 -1.119217882651 0.0000003 0.0 0.2 Optimized parameter and gradient vectors: 1 1.090935745277 -0.000000292892 Optimized scaling factors for the GTFs: Optimized zeta( 1): 1.19014 Minimum of the energy (in au) = -1.1192178827 Dipole moment (au, debye) = 0.00000 0.00000 Elapsed time (sec) = 0.3

Az outputból látható, hogy a pályakitevő értéke 1.24-ról 1.19-ra csökkent, s a rendszer energiája mélyebb lett. Most pedig végezzünk egy teljes variációs HF SCF-MO számítást a kérdéses bázissal, azaz relaxáljuk a bázisfüggvények centrumait is!

******************************************** * * * DGB-RHF * * * * A fully variational ab initio * * Hartree-Fock-Roothaan-Hall program * * with distributed cartesian Gaussians * * for atoms and molecules * * written by * * Dr. Tasi, Gyula * * 2005-2009 * * University of Szeged * * Szeged, Hungary * ******************************************** H2 molecule: STO-3G Initial molecular geometry (in angstroms): 1 0.0000000000 0 0.0000000000 0 0.0000000000 0

Page 214: Computational Chemistry

Tasi Gyula: Számítógépes kémia

214

1 0.7408480916 0 0.0000000000 0 0.0000000000 0 Initial molecular geometry (in au): 1 0.0000000000 0 0.0000000000 0 0.0000000000 0 1 1.4000000000 0 0.0000000000 0 0.0000000000 0 Charge of the molecule = 0 Number of electrons = 2 Number of occupied MOs = 1 Number of basis functions = 2 Number of parameters = 7 ---------------------------------- Calculation of the initial Hessian ---------------------------------- -9.9999999999988987E-004 -9.9957017088929963E-003 1.0000000000000000E-003 1.4603781022450857E-003 -1.0000000000000000E-003 -1.6613984824828842E-003 -1.0000000000000000E-003 -1.6613984824828842E-003 -9.9999999999988987E-004 -1.4603781022449747E-003 -1.0000000000000000E-003 -1.6613984824828854E-003 -1.0000000000000000E-003 -1.6613984824828854E-003 ---------------------------------------------------- Elements of the Approximate Diagonal Inverse Hessian ---------------------------------------------------- 0.1000430013943101 0.6847541732258709 0.6019025601284682 0.6019025601284682 0.6847541732258476 0.6019025601284679 0.6019025601284679 ---------------------------------------------------- BFGS optimization of geometry and/or atomic orbitals ---------------------------------------------------- --Saving parameters-- Iteration # 1: 1 -1.119400508038 0.1943171 0.0 0.0 --Saving parameters-- Iteration # 1: 2 -1.121452006429 0.1421258 0.0 0.0 --Saving parameters-- Iteration # 1: 3 -1.122885812068 0.0934684 0.0 0.0 --Saving parameters-- Iteration # 1: 4 -1.123745894625 0.0481369 0.0 0.0 --Saving parameters-- Iteration # 1: 5 -1.124074148768 0.0060740 0.0 0.0 --Saving parameters-- Iteration # 1: 6 -1.124080105266 0.0002379 0.0 0.0 --Saving parameters-- Iteration # 1: 7 -1.124080113616 0.0000013 0.0 0.0 --Saving parameters-- Iteration # 1: 8 -1.124080113616 0.0000002 0.0 0.1 Optimized parameter and gradient vectors: 1 1.087377957042 -0.000000044989 2 0.062576721759 -0.000000153720 3 0.000000000000 0.000000000000 4 0.000000000000 0.000000000000 5 1.337423278241 0.000000153720 6 0.000000000000 0.000000000000 7 0.000000000000 0.000000000000 Optimized scaling factors for the GTFs:

Page 215: Computational Chemistry

Tasi Gyula: Számítógépes kémia

215

Optimized zeta( 1): 1.18239 Scaling factors and optimized centers for the GTFs (in ang.): 1 1.182391 0.0331141749 0.0000000000 0.0000000000 2 1.182391 0.7077339167 0.0000000000 0.0000000000 Minimum of the energy (in au) = -1.1240801136 Dipole moment (au, debye) = 0.00000 0.00000 Elapsed time (sec) = 0.2

A rendszer energiája tovább mélyült, s a pályák elszakadtak az atommagoktól: a pályacentru-mok egy kissé a két atommag közé mozdultak el az x-tengely mentén. Növelve a bázis-függvények számát (kb. 50 darab primitív 1s GTF), teljes variációs számítással el tudjuk érni a HFL energiát: 1.13362957 au.

A érdeklődők számára további két cikket ajánlunk. A kiterjesztett viriál-tétel lehetővé teszi a kvantumkémiában használatos bázisfüggvények jóságának kvantitatív jellemzését [G. Tasi, I. Mayer: An extension of the virial theorem for general wave functions, Chemical Physics Letters, 449, 221-226 (2007)]. Továbbá a DGB program perturbációs számítások végzésére is alkalmas [G. Tasi, D. Barna: Energy decomposition based on the extended virial theorem: Hartree-Fock and second-order Møller–Plesset results, International Journal of Quantum Chemistry, 109, 2599-2605 (2009)]. A perturbációs módszer lehetőséget nyújt az elektronok mozgása HF elméleten túli korreláltságának a figyelembevételére.

Feladatok:

14.1 Határozza meg az 1s STO függvény STO-7GSTO-12G előállítását! Vesse össze a kapott eredményeket az irodalomban közöltekkel: R. López, G. Ramirez, J.M. Garcia de la Vega, J. Fernández Rico: Large Gaussian Expansions of STOs for the Calculation of Many-center Molecular Integrals with Slater Basis, Journal de chimie physique, 84, 695 (1987)!

14.2 Határozza meg a 2s STO függvény 1s GTO függvényekkel való STO-1GSTO-6G előállítását!

1 25

2 ( ; ) exp3

STOs r r r

14.3 Határozza meg a 2 zp STO függvény zg GTO függvényekkel való STO-1GSTO-6G előállítását!

1 25

2 ( ; ) cos expz

STOp r r r

14.4 Érdemes a 2s és a 2p STO függvényeket úgy illeszteni GTO függvényekkel, hogy a pályaexponensek azonosak legyenek. Ekkor a következő célfüggvényt kell maximalizálnunk:

2 2 2 2 1 2 2( , , ) .STO CGTO STO CGTOsp s p s s p pS dxdydz dxdydz

α c c

Page 216: Computational Chemistry

Tasi Gyula: Számítógépes kémia

216

Határozza meg a 2s és a 2p STO függvények STO-1GSTO-6G előállítását ilyen módon is! Vesse össze a kapott eredményeket az irodalomban közöltekkel: W.J. Hehre et al., J. Chem. Phys., 51, 2657 (1969)!

14.5 Végezzen HF/STO-3G számítást a HHe+ ( 1 ( ) 2.0925s He ) molekulára különböző magtávolságoknál! Próbálja meghatározni a molekula egyensúlyi geometriáját az adott elmé-leti szinten!

*14.6 Az egy elektront tartalmazó hidrogénatomra és 2H molekulaionra a hfrh.exe programmal közvetlenül nem tudunk HF SCF-MO számítást végezni. Tudná úgy módosítani a kódot, hogy ezek a számítások is kivitelezhetőek legyenek?

Page 217: Computational Chemistry

Tasi Gyula: Számítógépes kémia

217

15. Atomi töltések számítása elektrosztatikus potenciáltérképekből Molekulák atomi töltésekkel való reprezentációja hosszú múltra tekint vissza a kémiában

és ez az elképzelés az idők folyamán igen hasznosnak bizonyult [S. Fliszár: Atomic Charges, Bond Properties, and Molecular Energies, John Wiley & Sons: New York, 2009]. Kiterjedten használják az atomi töltéseket például molekulákban levő atomi centrumok reaktivitásának a jellemzésére, molekulák dipólusmomentumának szemléltetésére, a moleku-láris mechanikában és a molekuláris dinamikában elektrosztatikus kölcsönhatások figyelem-bevételére, a kvantumkémiában szolvatációs effektusok egyszerű modellek alapján történő számítására.

Sajnálatos módon az atomi töltés fizikailag közvetlenül nem mérhető mennyiség, s így nem tudunk egy olyan “ésszerű” kvantummechanikai operátort definiálni, amelynek saját-értékei a molekulát felépítő atomok töltéseit adnák meg. Ennek következtében az atomi töltések számítására valamilyen (empírikus vagy elméleti) sémát kell alkalmaznunk. A számított atomi töltések jóságát azonban valamilyen módon jellemeznünk kell. Elsődleges támpontot a kísérleti és a számított dipólusmomentumok és/vagy magasabbrendű multipólus-momentumok összehasonlítása adhat. Ekkor a számított atomi töltésrendszer dipólusmomen-tumát ill. magasabbrendű multipólusmomentumait hasonlítjuk össze a kísérleti és/vagy a kvantumkémiailag számított értékekkel. Az esetleges jó egyezés azonban még nem garantálja atomi töltéseink jóságát elektrosztatikus kölcsönhatási energiák számítására. A multipólus-momentumok egyezése ebből a szempontból csak szükséges, de nem elégséges feltételt jelent.

Kísérleti kémikusok előszeretettel alkalmazzák az elektronegativitás fogalmát molekulák polaritásának jellemzésére. Az elektronegativitás fogalmát rendszerint következőképpen vezetik be. A kémiai kötésben levő atomok közötti elektroneloszlás általában nem szimmetri-kus a kötés felezőpontján átmenő merőleges síkra: a torzultság mértéke és iránya attól függ, hogy melyik atom fejt ki nagyobb vonzó erőt az elektronokra. Ezt a vonzó erőt nevezik elektronegativitásnak. Az elektronegativitás fogalmát Linus PAULING vezette be a kötésben levő atom tulajdonságaként: “the power of an atom in a molecule to attract electrons to itself”. Minél nagyobb az atomok elektronegativitásbeli különbsége, annál polárosabb a kötés.

A következő táblázatban néhány elemre mutatjuk be a különböző módon meghatározott χ elektronegativitási értékeket:

Elem Pauling Sanderson

H 2.1 2.592

C 2.5 2.746

N 3.0 3.194

O 3.5 3.654

F 4.0 4.000

Page 218: Computational Chemistry

Tasi Gyula: Számítógépes kémia

218

Az elektronegativitási értékek számításánál általában kísérleti adatokat (kötésenergiák, ionizációs potenciálok, elektronaffinitások stb.) vesznek figyelembe (empírikus skálák). A legnagyobb probléma az, hogy az atomok elektronvonzó képessége függ az atom tényleges környezetétől, azaz állapotától. A PAULING-féle definíció ugyan a kötésben levő atomra vonatkozik, azonban a PAULING-féle elektronegativitási skála ezt a tényt nem tükrözi. Az előző képnek megfelelően a molekulák μ dipólusmomentuma az egyedi kötésmomentumok vektori összege. Az AB kétatomos molekula esetén írhatjuk, hogy

,A B

ahol az elektronegatívabb elem alkotja a dipólus negatív végét:

Ha , ;

Ha , .

A B A B

A B A B

Az individuális atomi elektronegativitási értékekkel kapcsolatos problémák illusztrálására vegyünk egy egyszerű példát: a CO molekulát. Látható, hogy a szén elektronegativitása szinte valamennyi skála szerint kisebb, mint az oxigéné. Ez alapján Cδ+Oδ- polaritást várunk. A kísérleti eredmények szerint azonban a molekula polaritása fordított!

SANDERSON tételezte fel először, hogy egy molekula képződésekor az atomi elektro-negativitások kiegyenlítődnek. A molekulában végül is minden atom azonos elektronega-tivitással fog rendelkezni: “when atoms initially different in electronegativity combine chemically, their electronegativities become equalized in the molecule”. A későbbiekben megmutatták, hogy a teljes kiegyenlítődés sok esetben kémiailag elfogadhatatlan ered-ményhez vezet, s csak részleges kiegyenlítődés zajlik le. A kiegyenlítődési elv a sűrűség-funkcionál elméletben (Eng. Density Functional Theory) nyert igazolást. Robert G. PARR adta meg az elektronegativitás definícióját a sűrűségfunkcionál elméletben a kémiai potenciál fogalmának segítségével.

A “jó” atomi töltésektől elvárjuk, hogy a molekulák környezetében visszaadják az elektrosztatikus potenciálteret. Az atomi töltésektől eltérően a molekuláris elektrosztatikus potenciál (MEP, Eng. Molecular Electrostatic Potential) szigorúan meghatározott kvantum-mechanikai tulajdonság és közvetlenül számítható a molekuláris elektron-hullámfüggvény-ből. Ennek következtében a kvantummechanika módot ad atomi töltéseink jóságának az ellenőrzésére.

A különböző elektronpopulációs analíziseket (MULLIKEN, LÖWDIN, BADER, stb.) régóta alkalmazzák a kvantumkémikusok atomi töltések számítására. A standard kvantumkémiai programokban is ezek a módszerek találhatók meg általában az egyszerű programozhatóság és a kis számítógépidőigény miatt. Ezek az atomi töltések azonban rendszerint nem adják jól vissza a kvantumkémiailag számított és a kísérletileg meghatározott dipólusmomentumokat, s így természetesen a molekula környezetében az elektrosztatikus potenciálteret sem.

Egy molekula környezetében levő r pontban az elektrosztatikus potenciál értéke a követ-kező módon számítódik a kvantumkémiában az LCAO-közelítésen belül:

,QM A A

A AA A

ddZ ZEP P

r r rr r

rr R r r r R r r

Page 219: Computational Chemistry

Tasi Gyula: Számítógépes kémia

219

ahol ZA az A atommag töltése, RA az A atommag pozíciója, ρ(r) a molekuláris elektron-sűrűségfüggvény, Pμv a P elsőrendű sűrűségmátrix egy eleme és φμ, φv valós atomi bázis-függvények (lásd a 4. és a 14. projekteket). A kifejezés első tagja az atommagok, a második pedig az elektronok járuléka. Látható, hogy a két járulék előjele ellentétes.

A MEP-térképekből következő módon származtathatunk atomi töltéseket (EP atomi töltések) [G. Tasi, I. Pálinkó: Using molecular electrostatic potential maps for similarity studies, Topics in Current Chemistry, 174, 45-71 (1995)]. Először a molekula VAN DER

WAALS felületén kívül valamilyen algoritmussal pontokat állítunk elő, majd ezekben a pontokban kiszámítjuk az előző formula alapján EP értékét (QM tér). Ezután próbamono-pólusokat veszünk fel az atommagok helyén, majd az általuk generált klasszikus elektro-sztatikus teret (CL tér) a legkisebb négyzetek módszerével (lásd a 11. projektet) ráillesztjük a QM térre. Egyetlen egy mellékfeltételt veszünk csak figyelembe: az atomi töltések összegének egyenlőnek kell lenni a molekula töltésével. A mellékfeltételt legegyszerűbben a LAGRANGE-féle multiplikátoros eljárással (MK: 2-7.) vehetjük figyelembe.

A paraméterbecslés során alkalmazott célfüggvény a következő:

2

1 21 1

, , , , ,N n

QM CLn i i j mol

i j

S q q q EP EP q q

ahol N az előállított pontok és n az atomok száma, QMiEP az i pontban számított QM és CL

iEP

az i pontban számított CL EP értéke, qj a j-ik atom töltése, qmol a molekula töltése és λ a LAGRANGE-féle multiplikátor. Az CL

iEP kifejezése az atomi töltések segítségével:

1

,n

jCLi

j ij

qEP

r

ahol az rij az i pont és a j-ik atom közötti távolság. A célfüggvény minimumának szükséges feltétele a grad(S) vektor eltűnése:

1 1

1

20 ( 1,2, , );

0.

N njQM

ii jk ik ij

n

j molj

qSEP k n

q r r

Sq q

Ennek megfelelően a következő összefüggéseket kapjuk:

1 1 1

( 1,2, , ).QMn N N

j i

j i iij ik ik

q EPk n

r r r

ahol λ' = λ/2. Bevezetjük a következő jelöléseket:

1

1

1;

.

N

kji ij ik

QMNi

ki ik

Lr r

EPM

r

Ezek után a következő mátrixegyenlethez jutunk:

Page 220: Computational Chemistry

Tasi Gyula: Számítógépes kémia

220

111 12 1 1

221 22 2 2

1 2

1

1

,

1

1 1 1 0

n

n

nn n nn n

mol

ML L L q

ML L L q

ML L L q

q

amit röviden az alábbi formában írhatunk fel:

.Lq M

Végül is az EP atomi töltések meghatározása érdekében csak egy inhomogén lineáris algebrai egyenletrendszert (MK: 1-4.) kell megoldanunk. A következőkben foglakozzunk egy kicsit inhomogén lineáris algebrai egyenletrendszerek numerikus megoldásával!

A GAUSS-eliminációs eljárás elsősorban pedagógiai szempontból fontos. Könnyen átlát-ható, könnyen programozható és teljes vagy részleges főelem-kiválasztás alkalmazásával numerikusan stabil, robosztus módszer. Tekintsük a következő inhomogén lineáris algebrai egyenletrendszert (MK: 1-4.):

11 1 12 2 1 1

21 1 22 2 2 2

1 1 2 2 .

n n

n n

m m mn n m

a x a x a x b

a x a x a x b

a x a x a x b

A módszer során alkalmazott legalapvetőbb lépés az, hogy egy sort (egyenletet) megszorzunk egy megfelelő konstanssal, majd a kapott sort kivonjuk az eredeti sor alatti sorból egy konkrét ismeretlen kiküszöbölése (eliminálása) érdekében. Ezt más konstansok alkalmazá-sával a kérdéses sor alatt elhelyezkedő többi sor esetén is elvégezzük.

Elimináljuk pl. x1-et az egyenletrendszerünk 2, 3, ..., m soraiból! Tegyük fel, hogy a11 nem zéró, és küszöböjük ki x1-et a 2. egyenletből. Ennek érdekében meg szorozzuk az 1. sort a21/a11-gyel, majd az eredményt kivonjuk a 2. sorból:

212 2 1

11

212 2 1

11

( 1, 2, , );

.

j j j

aa a a j n

a

ab b b

a

A 3, 4, ..., m sorok esetén rendre a következő faktorokat kell alkalmaznunk: a31/a11, a41/a11, ..., am1/a11. Az “új” egyenletrendszerünk a következő lesz:

11 1 12 2 1 1

22 2 2 2

2 2 .

n n

n n

m mn n m

a x a x a x b

a x a x b

a x a x b

Ezek után tegyük fel, hogy a22' nem zéró, és küszöböljük ki az x2-őt a 3, 4, ..., m egyen-letekből! Végrehajtva ezeket az eliminációkat a következő egyenletrendszert kapjuk:

Page 221: Computational Chemistry

Tasi Gyula: Számítógépes kémia

221

11 1 12 2 13 3 1 1

22 2 23 3 2 2

33 3 3 3

3 3 .

n n

n n

n n

m mn n m

a x a x a x a x b

a x a x a x b

a x a x b

a x a x b

Két alapvető kérdés merül fel a módszerrel kapcsolatban: (1) Az “új” egyenletrendszerek ekvivalensek-e az eredetivel?; (2) Mikor ér véget a szukcesszív elimináció?

Az első kérdésre könnyen válaszolhatunk: az “új” egyenletrendszerek ekvivalensek az eredetivel, azaz mindnyájan ellentmondóak, vagy mindnyájan megoldhatók és ugyanazok a megoldások. A második kérdésre a következő válasz adható. Az eljárás egyrészt akkor feje-ződik be, ha valamelyik egyenletben a koefficiensek mind zérusok és a szabad tag nem zérus. Ekkor nincs megoldás: az egyenletrendszerünk ellentmondó. (Ha olyan egyenlethez jutunk, amelyben minden koefficiens és a szabad tag is zérus, akkor az elhagyható. Ezt az egyenletet ugyanis az ismeretlenek tetszőleges értéke kielégíti.) Másrészt akkor fejeződik be az eljárás, ha “háromszög”, vagy “trapéz” alakra sikerül hozni az egyenletrendszerünket. Ezekben az esetekben az egyenletrendszerünk megoldható, s az első esetben határozott, azaz egy megoldás, míg a másodikban határozatlan, azaz végtelen sok megoldás létezik.

A “háromszög” alakra példaként az egyszerűség kedvéért nézzük azt az esetet, amikor az ismeretlenek és az egyenletek száma négy:

11 12 13 14 1 1

22 23 24 2 2

33 34 3 3

44 4 4

.

a a a a x b

a a a x b

a a x b

a x b

Az x4-et az utolsó egyenletből meg tudjuk határozni: x4 = b4'/a44'. Ezt az értéket behelyet-tesítve a 3. egyenletbe x3 értékét is megkapjuk:

3 3 4 3433

1.x b x a

a

A visszahelyettesítésekre vonatkozó általános formula:

1

1.

n

i i ij jj iii

x b a xa

Mintegy melléktermékként a koefficiens mátrix determinánsát is megkapjuk: det(A) = a11 a22' a33' a44'.

Ha “trapéz” alakhoz jutunk, akkor az egyenletek száma kisebb, mint az ismeretlenek száma. Ebben az esetben végtelen sok megoldás lehetséges. Maradjunk az utóbbi egyszerű példánál, s tegyük fel, hogy a következő "trapéz" alakot kapjuk:

Page 222: Computational Chemistry

Tasi Gyula: Számítógépes kémia

222

111 12 13 14 1

222 23 24 2

333 34 3

4

.

xa a a a b

xa a a b

xa a b

x

Ekkor a33' x3 + a34' x4 = b3', azaz x4 értéke határozatlan, tehát szabadon megválaszthatjuk (szabad változó). A többi ismeretlen (x1, x2, x3) értéke ezek után már határozott lesz.

Látható, hogy az eljárás során az éppen aktuális diagonális elemmel osztunk. Nyilván-való. hogy ez zérus nem lehet. Ezt a problémát sorok cseréjével természetesen könnyen meg lehet oldani. Azt az elemet, amivel osztunk főelemnek nevezzük.

Igen fontos megjegyezni, hogy a főelem megfelelő kiválasztása nélkül a GAUSS-elimi-nációs eljárás a fellépő kerekítési hibák miatt numerikusan instabil lehet. Általában úgy választjuk ki a főelemet, hogy az az adott oszlopban a legnagyobb abszolútértékű koefficiens legyen. Ez sorok cseréjével megoldható, s az eljárást részleges főelem-kiválasztásnak nevez-zük. Ha oszlopokat is cserélünk a főelem kiválasztásánál, akkor teljes kiválasztásról beszé-lünk. A tapasztalat az, hogy általában elegendő csak részleges kiválasztást alkalmazni. Ha az eljárás során sorokat cserélünk, akkor ezt a tényt a koefficiens mátrix determinánsa értékének megadásánál figyelembe kell venni, hiszen két sor cseréjekor a determináns előjelet vált.

Még egy dolgot érdemes megfontolni. Ha az eredeti egyenletrendszerünkben az egyik sort megszorozzuk egy megfelelően választott nagy számmal, akkor a kérdéses ismeretlenek értéke nem fog megváltozni, de a főelemek kiválasztásánál ez a sor preferált lesz. Tehát ha az egyenleteink rosszul skálázottak, akkor érdemes minden egyenletünknél a koefficienseket úgy megválasztani, hogy a legnagyobb koefficiens értéke 1 legyen. Ezt az eljárást nevezzük implicit főelem-kiválasztásnak.

Határozzuk meg a GAUSS-eliminációs módszer esetén végrehajtott elemi műveletek számát. Először azt vizsgáljuk meg, hogy az i-ik ismeretlen kiküszöbölése ni sorból mennyi műveletet igényel. Az osztások száma: ni. Az összeadásoké és a szorzásoké: (ni+1) (ni) = (ni)2 + (ni). Tehát az eliminációs lépésben a koefficiens mátrixon összesen: (n1)2 + (n2)2

+ ... + 12 + (n1) + (n2) + ... + 1 = (n3n)/3 összeadást, (n1)2 + (n2)2 +...+ 12 + (n1) + (n2) +...+ 1 = (n3n)/3 szorzást és (n1) + (n2) + ... + 1 = n(n1)/2 osztást hajtunk végre. Az eliminációs lépésben a szabad tagok oszlopvektorán végrehajtott műveletek száma: (n1) + (n2) + ... + 1 = n(n1)/2 összeadás és (n1) + (n2) + ... + 1 = n(n1)/2 szorzás. A visszahelyettesítési lépés n(n1)/2 összeadást, n(n1)/2 szorzást és n osztást igényel. Tehát a teljes eljárás közelítőleg n3/3 összeadást, n3/3 szorzást és n2/2 osztást igényel (2n3/3). Ha n = 10, akkor közelítőleg 700 műveletet, míg n = 100 esetén már közelítőleg 700,000 műveletet kell végrehajtanunk. Látható, hogy nagy n esetén számítógép használata nélkül szinte reménytelen vállalkozás az egyenletrendszer megoldása.

Az alábbiakban egy FORTRAN nyelvű szubrutint (subroutine gauss) adunk meg a GAUSS-elimináció végrehajtására (gauss.f). A szubrutinban részleges főelem-kiválasztást alkalmazunk.

Page 223: Computational Chemistry

Tasi Gyula: Számítógépes kémia

223

************************************************************************ SUBROUTINE GAUSS(A,B,X,N,EPSIL,DET,ERROR) ************************************************************************ * THIS SUBROUTINE SOLVES THE A X = B LINEAR EQUATION SYSTEM USING * THE GAUSSIAN ELIMINATION METHOD WITH BACK SUBSTITUTION AND * PARTIAL PIVOTING. (C) DR. TASI, GYULA, UNIV. SZEGED, * DEPT. APPL. & ENVIRON. CHEM., * H-6720 SZEGED, RERRICH B. TER 1., HUNGARY * *************** INPUT PARAMETERS: ************************************** * --- A: NMAX x NMAX MATRIX OF THE COEFFICIENTS. * --- B: NMAX x 1 RIGHT HAND-SIDE COLUMN VECTOR. * --- N: ACTUAL DIMENSION OF THE PROBLEM. * --- EPSIL: A SMALL NUMBER REPRESENTING THE ZERO ON THE COMPUTER. * *************** OUTPUT PARAMETERS: ************************************* * --- X: NMAX x 1 COLUMN MATRIX OF UNKNOWNS. * --- DET: THE DETERMINANT OF THE COEFFICIENT MATRIX. * --- ERROR: A LOGICAL VARIABLE. IF THE ERROR IS TRUE THEN THE MATRIX A * IS SINGULAR. ************************************************************************ PARAMETER (NMAX=20) IMPLICIT REAL*8(A-H,O-Z) LOGICAL ERROR DIMENSION A(NMAX,NMAX),AA(NMAX,NMAX),B(NMAX),BB(NMAX),X(NMAX) ERROR=.FALSE. IP=1 DO I=1,N DO J=1,N AA(I,J)=A(I,J) END DO BB(I)=B(I) END DO N1=N-1 DO 20 I=1,N1 PIV=DABS(AA(I,I)) L=I I1=I+1 DO J=I1,N PIVS=DABS(AA(J,I)) IF(PIVS.GT.PIV) THEN PIV=PIVS L=J ENDIF END DO IF(PIV.LT.EPSIL) GOTO 20 IF(L.EQ.I) GOTO 10 DO J=1,N CALL SWAP(AA(L,J),AA(I,J)) END DO CALL SWAP(BB(I),BB(L)) IP=-IP 10 CONTINUE DO J=I1,N FAK=AA(J,I)/AA(I,I) DO K=I1,N AA(J,K)=AA(J,K)-FAK*AA(I,K) END DO BB(J)=BB(J)-FAK*BB(I)

Page 224: Computational Chemistry

Tasi Gyula: Számítógépes kémia

224

END DO 20 CONTINUE IF(DABS(AA(N,N)).LT.EPSIL) THEN ERROR=.TRUE. RETURN ENDIF X(N)=BB(N)/AA(N,N) I=N-1 30 SUM=0.D0 I1=I+1 DO J=I1,N SUM=SUM+AA(I,J)*X(J) END DO X(I)=(BB(I)-SUM)/AA(I,I) I=I-1 IF(I.GT.0) GOTO 30 DET=1.D0 DO I=1,N DET=DET*AA(I,I) END DO DET=DBLE(IP)*DET RETURN END ************************************************************************ SUBROUTINE SWAP(A,B) ************************************************************************ IMPLICIT REAL*8(A-H,O-Z) TEMP=A A=B B=TEMP RETURN END

A GAUSS szubrutin bemenő (input) paraméterei: az A koefficiens mátrix, a szabad tagok B oszlopvektora, az N a koefficiens mátrix rendje, az EPSIL egy kicsi szám, ami a számábrázolásnak megfelelő zérót reprezentálja. A kimenő (output) paraméterek: az X tömb az ismeretlenek oszlopvektora, a DET a koefficiens mátrix determinánsa és az ERROR logikai változó. Az ERROR értéke .TRUE., ha a koefficiens mátrix szinguláris. A szubrutin paramétere: NMAX, a kezelhető probléma maximális mérete.

Látható, hogy az A és a B tömböt a szubrutin elején az AA és a BB tömbökbe töltjük. Erre akkor van szükség, ha azt akarjuk, hogy az A és a B tömbök érintetlenek maradjanak, azaz ne rajtuk hajtsuk végre a változtatásokat. Az IP paraméter a sorcserék számának a paritását adja meg. Ezzel kell megszoroznunk det(A’) értékét, hogy det(A)-t megkapjuk (lásd a szubrutin végét). A SWAP szubrutin ahogy korábban is két változó tartalmát cseréli fel.

A főprogramban csak az A és a B tömbök beolvasásáról kell gondoskodnunk és az ERROR logikai változót kell lekezelnünk. Egy megoldás lehet a kérdéses feladatok elvégzésére a következő főprogram:

************************************************************************ PROGRAM MAIN ************************************************************************ PARAMETER (NMAX=20) IMPLICIT REAL*8(A-H,O-Z) LOGICAL ERROR DIMENSION A(NMAX,NMAX), B(NMAX),X(NMAX)

Page 225: Computational Chemistry

Tasi Gyula: Számítógépes kémia

225

DATA EPSIL /1.D-16/ WRITE(*,'(A\)') 'DIMENSION OF THE PROBLEM: ' READ(*,*) N WRITE (*,'(/A)') 'ELEMENTS OF THE COEFFICIENT MATRIX' DO I=1,N WRITE(*,'(A,I3,2X,A\)') 'ROW ',I,': ' READ(*,*) (A(I,J),J=1,N) END DO WRITE (*,'(/A)') 'ELEMENTS OF THE RIGHT HAND-SIDE VECTOR' READ(*,*) (B(J),J=1,N) CALL GAUSS(A,B,X,N,EPSIL,DET,ERROR) IF(ERROR) STOP 'THE COEFFICIENT MATRIX IS SINGULAR!' WRITE(*,'(/A)') 'VECTOR OF UNKNOWNS' DO I=1,N WRITE(*,'(A,I3,A,F13.5)') 'X(',I,') = ',X(I) PAUSE 'PRESS ANY KEY...' END DO WRITE(*,'(A,F13.5)') 'DET(A)= ',DET END

Oldjuk meg a gauss.exe program segítségével a következő egyenletrendszert!

1

2

3

4

2 1 5 1 8

1 3 0 6 9.

0 2 1 2 5

1 4 7 6 0

x

x

x

x

A program futáskor a következőket írja ki a képernyőre:

ELEMENTS OF THE COEFFICIENT MATRIX: ROW 1 : 2.00000 1.00000 -5.00000 1.00000 ROW 2 : 1.00000 -3.00000 0.00000 -6.00000 ROW 3 : 0.00000 2.00000 -1.00000 2.00000 ROW 4 : 1.00000 4.00000 -7.00000 6.00000 ELEMENTS OF THE RIGHT HAND-SIDE VECTOR: 8.00000 9.00000 -5.00000 0.00000 VECTOR OF UNKNOWNS: X( 1) = 3.00000 X( 2) = -4.00000 X( 3) = -1.00000 X( 4) = 1.00000 DETETERMINANT OF THE COEFFICIENT MATRIX= 27.00000

A GAUSS-JORDAN-féle eliminációs eljárás a GAUSS-eljárás módosításának tekinthető. Ennél a módszernél az eliminációs lépéseket nemcsak a diagonális alatt, hanem felette is elvégezzük. Ennek következtében végül is diagonális mátrixot kapunk. A következőkben nézzük meg az általában favorizált LU-faktorizációs módszert!

Tegyük fel, hogy az n-edrendű A = {aij} mátrixot elő tudjuk állítani egy alsó és egy felső háromszögmátrix szorzataként: A = LU, ahol L = {lij} és U = {uij} n-edrendű alsó illetve

Page 226: Computational Chemistry

Tasi Gyula: Számítógépes kémia

226

felső háromszögmátrixok. Az A mátrixnak ezt a felbontását LU-faktorizációnak nevezzük. Ekkor az AX = B lineáris egyenletrendszerünk következőképpen fog alakulni: AX = (LU)X = L(UX) = B. Tehát az eredeti egyenletrendszerünk helyett két egyenletrendszert kapunk:

;

.

LY B

UX Y

Ez a két egyenletrendszer azonban igen könnyen megoldható. Az Y oszlopvektort előrehe-lyettesítéssel kaphatjuk meg:

11

11

1

1

;

1( 2,3, , ).

i

i i ij jjii

by

l

y b l y i nl

Az Y oszlopvektor ismeretében az X oszlopvektort pedig a szokásos módon visszahe-lyettesítéssel határozhatjuk meg:

1

;

1( 1, 2, ,1).

nn

nn

n

i i ij jj iii

yx

u

x y u x i n nu

Ha az A mátrix LU-dekompozíciója ismert, egymásután több B oszlopvektor esetén is megoldhatjuk a lineáris egyenletrendszert, ami például az inverz mátrix számításánál is szük-séges.

Ezek után az a kérdés merül fel, hogy hogyan lehet végrehajtani az A mátrix faktori-zációját? Fejezzük ki az A mátrix ij-ik elemét az L és az U mátrixok elemeivel:

1 1 2 2

1 1 2 2

1 1 2 2

: ;

: ;

: .

ij i j i j ii ij

ij i j i j ii jj

ij i j i j ij jj

i j a l u l u l u

i j a l u l u l u

i j a l u l u l u

Ez összesen n2 egyenletet jelent (i, j = 1, 2, ..., n), de nekünk ezzel szemben n2 + n ismeret-lenünk (lij, uij) van. (A diagonális ugyanis kétszer fordul elő.) Ennek következtében n ismeretlen értékét önkényesen megválaszthatjuk, s a többit ezután számíthatjuk. Ha az lii elemeket egységnyinek választjuk ( 1iil ), akkor megmutatható, hogy az A mátrix fakto-rizációja egyértelmű. A többi elem értékét a CROUT-féle algoritmus alapján számíthatjuk.

A CROUT-féle algoritmus lépései a következők. Minden j = 1, 2, ..., n esetén végrehajtjuk a következő két lépést. Először i = 1, 2, ..., j esetén az i < j-re és az i = j-re vonatkozó összefüggések alapján meghatározzuk az uij elemeket:

1

1

.i

ij ij ik kjk

u a l u

Ha i = 0, akkor a második tag zérus. Másodszor i = j + 1, j + 2, ..., n esetén az i > j-re vonatkozó összefüggések alapján meghatározzuk az lij elemeket:

Page 227: Computational Chemistry

Tasi Gyula: Számítógépes kémia

227

1

1

1.

j

ij ij ik kjkjj

l a l uu

Néhány elem kiszámítása után megbizonyosodhatunk arról, hogy az lij és az uij elemek rendelkezésre állnak, amikor szükségünk van rájuk, s minden aij elemet csak egyszer haszná-lunk fel. Ebből pedig az következik, hogy az A mátrix elemei helyén tárolhatjuk az L és az U mátrixok elemeit (“faktorizáció helyben”). Az lii = 1 elemek (i = 1, 2, ... , n) tárolására természetesen nincs szükség.

Egy negyedrendű mátrix esetén a következő mátrixhoz jutunk az LU-faktorizáció végrehajtása után:

11 12 13 14

21 22 23 24

31 32 33 34

41 42 43 44

.

u u u u

l u u u

l l u u

l l l u

Az lij elemek számításánál az ujj elemekkel osztanunk kell. Ennek következtében a CROUT-féle algoritmus numerikus stabilitása szempontjából is lényeges valamilyen főelem-kiválasz-tás alkalmazása. A gyakorlatban azonban csak a részleges főelem-kiválasztás (sorok cseréje) vált be.

Az alábbiakban FORTRAN nyelvű szubrutinokat adunk meg az LU-dekompozíció (SUBROUTINE LUFACT), valamint az előrehelyettesítések és a visszahelyettesítések végrehajtására (SUBROUTINE LUSUBS). Az LU-dekompozíciós szubrutinban részleges főelem-kiválasztást alkalmazunk. Az eljárás során az eredeti A mátrix megszűnik: helyette az L és az U mátrixokat kapjuk meg az A tömben. A LUSUBS szubrutin esetén a B tömb belépéskor a szabad tagok oszlopvektorát, kilépéskor az ismeretlenek oszlopvektorát tartalmazza. Ha újabb B szabad vektor esetén akarjuk elvégezni a számításokat, akkor csak a LUSUBS szubrutint kell meghívnunk az új B tömbbel. Tehát nem kell a faktorizációt többször végrehajtanunk! A GAUSS-eliminációs eljárás esetén minden újabb B szabad vektor-ral végre kell hajtanunk a redukciót.

************************************************************************ SUBROUTINE LUFACT(A,N,EPSIL,ERROR,IND,IP) ************************************************************************ * THIS SUBROUTINE PERFORMES LU-DECOMPOSITION OF GENERAL MATRICES USING * PARTIAL PIVOTING. * (C) DR. TASI, GYULA * UNIV. SZEGED * DEPT. APPL. & ENVIRON. CHEM. * H-6720 SZEGED, RERRICH B. TER 1. * HUNGARY * *************** INPUT PARAMETERS: ************************************** * --- A: NMAX x NMAX MATRIX. * --- N: ACTUAL ORDER OF MATRIX A. * --- EPSIL: A SMALL NUMBER REPRESENTING THE ZERO ON THE COMPUTER. **************** OUTPUT PARAMETERS: ************************************* * --- A: IT CONTAINS THE L & U MATRICES. * --- ERROR: A LOGICAL VARIABLE. IF THE ERROR IS TRUE THEN THE MATRIX A * IS SINGULAR.

Page 228: Computational Chemistry

Tasi Gyula: Számítógépes kémia

228

* --- IND: N x 1 COLUMN VECTOR WHICH RECORDS THE ROW PERMUTATION. * --- IP: AN INTEGER VARIABLE. IP (= 1) REPRESENTS THE PARITY OF THE NUMBER OF ROW INTERCHANGES. ************************************************************************ IMPLICIT REAL*8(A-H,O-Z) LOGICAL ERROR PARAMETER (NMAX=20) DIMENSION A(NMAX,NMAX),IND(NMAX) IP=1 ERROR=.FALSE. DO J=1,N DO I=1,J-1 SUM=A(I,J) DO K=1,I-1 SUM=SUM-A(I,K)*A(K,J) END DO A(I,J)=SUM END DO PIV=0.D0 DO I=J,N SUM=A(I,J) DO K=1,J-1 SUM=SUM-A(I,K)*A(K,J) END DO A(I,J)=SUM PIVS=DABS(A(I,J)) IF(PIVS.GE.PIV) THEN IMAX=I PIV=PIVS ENDIF END DO IF(J.NE.IMAX) THEN DO K=1,N CALL SWAP(A(IMAX,K),A(J,K)) END DO IP=-IP ENDIF IND(J)=IMAX IF(DABS(A(J,J)).LT.EPSIL) THEN ERROR=.TRUE. RETURN END IF IF(J.NE.N) THEN FAK=1.D0/A(J,J) DO I=J+1,N A(I,J)=A(I,J)*FAK END DO ENDIF END DO RETURN END

Page 229: Computational Chemistry

Tasi Gyula: Számítógépes kémia

229

************************************************************************ SUBROUTINE SWAP(A,B) ************************************************************************ IMPLICIT REAL*8(A-H,O-Z) TEMP=A A=B B=TEMP RETURN END ************************************************************************ SUBROUTINE LUSUBS(A,N,IND,B) ************************************************************************ * AFTER LU-DECOMPOSITION THIS SUBROUTINE PERFORMES FORWARD AND BACK * SUBSTITUTIONS FOR DETERMINING UNKNOWNS. * (C) DR. TASI, GYULA * UNIV. SZEGED * DEPT. APPL. & ENVIRON. CHEM. * H-6720 SZEGED, RERRICH B. TER 1. * HUNGARY * *************** INPUT PARAMETERS: ************************************** * --- A: NMAX x NMAX MATRIX. IT CONTAINS THE L & U MATRICES. * --- N: ACTUAL ORDER OF MATRIX A. * --- IND: N x 1 COLUMN VECTOR WHICH RECORDS THE ROW PERMUTATION. * --- B: NMAX x 1 RIGHT-HAND SIDE COLUMN VECTOR. *************** OUTPUT PARAMETERS: ************************************* * --- B: NMAX x 1 COLUMN VECTOR OF UNKNOWNS. ************************************************************************ IMPLICIT REAL*8(A-H,O-Z) PARAMETER (NMAX=20) DIMENSION A(NMAX,NMAX),B(NMAX),IND(NMAX) II=0 DO I=1,N LL=IND(I) SUM=B(LL) B(LL)=B(I) IF(II.NE.0) THEN DO J=II,I-1 SUM=SUM-A(I,J)*B(J) END DO ELSEIF(DABS(SUM).GT.0.D0) THEN II=I ENDIF B(I)=SUM END DO DO I=N,1,-1 SUM=B(I) DO J=I+1,N SUM=SUM-A(I,J)*B(J) END DO B(I)=SUM/A(I,I) END DO RETURN END

Tehát, ha az AX = B lineáris egyenletrendszert akarjuk megoldani, akkor először a LUFACT, majd a LUSUBS szubrutint kell meghívnunk:

Page 230: Computational Chemistry

Tasi Gyula: Számítógépes kémia

230

... CALL LUFACT(A,N,EPSIL,ERROR,IND,IP) CALL LUSUBS(A,N,IND,B) ....

Az ismeretlenek X oszlopvektorát a B tömben kapjuk meg. A korábban bemutatott főprogram módosításával könnyen előállíthatjuk a megfelelő főprogramot.

Az A mátrix determinánsának a kiszámítása igen egyszerű, hiszen csak az U mátrix diagonális elemeire van szükségünk:

1

det det det det .n

jjj

u

A L U U

Természetesen most is nyilván kell tartanunk a sorcserék számának a paritását (lásd az IP egész típusú változót a LUFACT szubrutinban). A LUSUBS szubrutin alkalmazására ebben az esetben nincs szükség.

Ha az A mátrix inverzét akarjuk meghatározni, akkor először a LUFACT szubrutint kell meghívnunk, majd egy ciklusban a LUSUBS szubrutin segítségével meghatározzuk az A-1 mátrix oszlopait az egységmátrix megfelelő oszlopait alkalmazva B tömbként kiindulásként:

... CALL LUFACT(A,N,EPSIL,ERROR,IND,IP) DO I=1,N DO J=1,N E(I,J)=0.D0 END DO E(I,I)=1.D0 END DO DO J=1,N CALL LUSUBS(A,N,IND,E(1,J)) END DO ....

A FORTRAN nyelvben az E(1,J) tulajdonképpen az E tömb j-ik oszlopának a címét jelenti. Természetesen hasonló módon a GAUSS-eliminációs eljárás is alkalmazható a korábban említett hátrányok mellett inverz mátrix numerikus számítására.

Az alábbiakban egy FORTRAN nyelvű kódot (epchg.f) adunk meg EP atomi töltések számítására. A program bemenő adatai: NATOMS az atomok száma, N a van der Waals felületen kívül generált pontok száma, QMOL a molekula töltése, X, Y és Z az atomi DESCARTES-féle koordinátákat tartalmazó tömbök, P a VAN DER WAALS felületen kívül generált pontok DESCARTES-féle koordinátáit és EP a P pontokban számított kvantum-mechanikai EP-értékeket tartalmazó tömbök. A számítások során atomi egységeket használunk. A főprogram első részében felépítjük az A mátrixot és a B oszlopvektort, majd az LU-faktorizációs módszerrel megoldjuk az egyenletrendszert. Ezután meghatározzuk az EP-töltésrendszer dipólusmomentumát, majd az illesztés jóságára jellemző (Eng. root mean square deviation) paramétert:

1 2

min ,S

rmsdN

ahol a számlálóban a célfüggvény minimuma szerepel.

Page 231: Computational Chemistry

Tasi Gyula: Számítógépes kémia

231

************************************************************************ PROGRAM EPCHG ************************************************************************ IMPLICIT REAL*8 (A-H,O-Z) LOGICAL ERROR CHARACTER SYMB*2 PARAMETER(NMAX=100,MAT=NMAX-1,MAXP=MAT*60) COMMON /SYMBOL/ SYMB(86) DIMENSION A(NMAX,NMAX),EP(MAXP),P(3,MAXP),B(NMAX),IND(NMAX) DIMENSION X(MAT),Y(MAT),Z(MAT),NAT(MAT),DIP(3) DATA EPSIL,DEB,AU2CAL /1.D-16,0.393427328D0,627.51D0/ DATA AU2KJ /2625.78D0/ READ(*,*) NATOMS,QMOL,N DO I=1,NATOMS READ(*,*) NAT(I),X(I),Y(I),Z(I) END DO DO I=1,N READ(*,*) P(1,I),P(2,I),P(3,I),EP(I) EP(I)=EP(I)/AU2KJ END DO WRITE(*,'(/A)') 'ATOMIC CARTESIAN COORDINATES (A.U.)' WRITE(*,'(/A)') $ ' ATOM X(I) Y(I) Z(I)' DO I=1,NATOMS WRITE(*,'(2X,A2,3(2X,F14.6))') SYMB(NAT(I)),X(I),Y(I),Z(I) END DO PAUSE DO K=1,NATOMS DO J=1,NATOMS SUM=0.D0 DO I=1,N RIK=(P(1,I)-X(K))**2+(P(2,I)-Y(K))**2+(P(3,I)-Z(K))**2 RIK=DSQRT(RIK) RIJ=(P(1,I)-X(J))**2+(P(2,I)-Y(J))**2+(P(3,I)-Z(J))**2 RIJ=DSQRT(RIJ) SUM=SUM+1.D0/(RIK*RIJ) END DO A(K,J)=SUM END DO A(K,NATOMS+1)=1.D0 END DO DO J=1,NATOMS A(NATOMS+1,J)=1.D0 END DO A(NATOMS+1,NATOMS+1)=0.D0 DO K=1,NATOMS SUM=0.D0 DO I=1,N RIK=(P(1,I)-X(K))**2+(P(2,I)-Y(K))**2+(P(3,I)-Z(K))**2 RIK=DSQRT(RIK) SUM=SUM+EP(I)/RIK END DO B(K)=SUM END DO B(NATOMS+1)=QMOL WRITE(*,'(/A)') 'ELEMENTS OF MATRIX A' CALL MATOUT(A,B,NATOMS+1,NATOMS+1,NMAX,NMAX,1) PAUSE WRITE(*,'(/A)') 'ELEMENTS OF COLUMN MATRIX B'

Page 232: Computational Chemistry

Tasi Gyula: Számítógépes kémia

232

DO I=1,NATOMS+1 WRITE(*,'(A,I3,A,F13.5)') 'M(',I,') = ',B(I) END DO PAUSE CALL LUFACT(A,NATOMS+1,EPSIL,ERROR,IND,IP) IF(ERROR) STOP 'THE MATRIX A IS SINGULAR!' CALL LUSUBS(A,NATOMS+1,IND,B) WRITE(*,'(/A)') 'EP ATOMIC CHARGES' DO I=1,NATOMS WRITE(*,'(A5,A2,A2,2X,A,I3,A,F13.5)') $ 'ATOM ',SYMB(NAT(I)),': ','Q(',I,') = ',B(I) END DO IF(IDINT(QMOL).EQ.0) THEN DO I=1,3 DIP(I)=0.D0 END DO DO I=1,NATOMS DIP(1)=DIP(1)+B(I)*X(I) DIP(2)=DIP(2)+B(I)*Y(I) DIP(3)=DIP(3)+B(I)*Z(I) END DO DO I=1,3 DIP(I)=DIP(I)/DEB END DO DIPOLM=DSQRT(DIP(1)**2+DIP(2)**2+DIP(3)**2) WRITE(*,'(/A,F13.5)') $ 'DIPOLE MOMENT (DEBYES) OF EP ATOMIC CHARGES:',DIPOLM ENDIF RMSD=0.D0 PERCENT=0.D0 DO I=1,N EQ=0.D0 DO J=1,NATOMS DIST=(P(1,I)-X(J))**2+(P(2,I)-Y(J))**2+(P(3,I)-Z(J))**2 DIST=DSQRT(DIST) EQ=EQ+B(J)/DIST END DO RMSD=RMSD+(EP(I)-EQ)**2 PERCENT=PERCENT+DABS((EP(I)-EQ)/EP(I)) END DO PERCENT=PERCENT*100.D0 WRITE(*,'(/A)') 'GOODNESS OF MEP FIT' WRITE(*,'(A,I4)') 'NUMBER OF POINTS: ',N WRITE(*,'(A,F14.6)') 'SUM OF SQUARES (A.U.): ',RMSD RMSD=DSQRT(RMSD/DBLE(N))*AU2CAL PERCENT=PERCENT/N WRITE(*,'(A,F13.5,A4,F13.5)') $ 'RMSD (KCAL/MOL): ',RMSD,' %: ',PERCENT END ************************************************************************ BLOCK DATA ************************************************************************ CHARACTER SYMB*2 COMMON /SYMBOL/ SYMB(86) DATA SYMB/ $ ' H', 'He', 'Li', 'Be', ' B',' C', ' N', ' O', ' F', 'Ne', $ 'Na', 'Mg', 'Al', 'Si',' P', ' S', 'Cl', 'Ar',

Page 233: Computational Chemistry

Tasi Gyula: Számítógépes kémia

233

$ ' K', 'Ca', 'Sc', 'Ti', ' V','Cr', 'Mn','Fe', 'Co', 'Ni', $ 'Cu', 'Zn', 'Ga', 'Ge', 'As','Se', 'Br', 'Kr', 'Rb', 'Sr', $ ' Y', 'Zr', 'Nb', 'Mo', 'Tc','Ru', 'Rh', 'Pd', 'Ag', 'Cd', $ 'In', 'Sn', 'Sb', 'Te', ' I','Xe', 'Cs', 'Ba', 'La', 'Ce', $ 'Pr', 'Nd', 'Pm', 'Sm', 'Eu','Gd', 'Tb', 'Dy', 'Ho', 'Er', $ 'Tm', 'Yb', 'Lu', 'Hf', 'Ta',' W', 'Re', 'Os', 'Ir', 'Pt', $ 'Au', 'Hg', 'Tl', 'Pb', 'Bi','Po', 'At', 'Rn'/ END

Hogyan generálhatunk megfelelő pontokat a molekula VAN DER WAALS felületén kívül? Egy kitűnő lehetőséget nyújt pl. a MACRA-algoritmus, amit A.M. RICHARD publikált 1991-ben [A.M. Richard: Quantitative Comparison of Molecular Electrostatic Potentials for Structure-Activity Studies, J. Comput. Chem., 12, 959 (1991)]. A módszer egységnyi sugarú gömbön, egyenletes eloszlásban generált ponthalmazból indul ki (lásd a 10. projektet). Ezt az ún. templátgömböt mindenegyes atomi centrumba helyezzük, majd meghatározott módon skálázzuk őket úgy, hogy koncentrikus héjakat kapjunk. Az első héj esetén R(1) = 2 Å, míg a további héjaknál:

( ) ( 1) ( 1) ( 2),R I R I GS I I

ahol GS a szomszédos pontok közötti átlagos távolság. Csak azokat a pontokat tartjuk meg egy adott héj esetén, melyek nem tartoznak több gömbhöz. A MACRA-algoritmus olyan ponthalmazt eredményez, melynél a pontok sűrűsége radiálisan csökken a molekulától távo-lodva. A következő kód (macra.f) egy lehetséges implementációját mutatja be az algorit-musnak:

c*********************************************************************** subroutine macra(natoms,coord,np,p) c*********************************************************************** * MACRA algorithm to generate points radially around the molecule * * (C) G. Tasi * * Department of Applied and Environmental Chemistry * * University of Szeged * * Rerrich B. ter 1 * * H-6720 Szeged, Hungary * * * * Refrence: A.M. Richard, J. Comput. Chem., 12, 959 (1991). * ************************************************************************ implicit real*8(a-h,o-z) implicit integer*4(i-n) include 'dimension.h' dimension coord(3,maxnb) dimension p(3,maxpp),cir(3,300) data nshell,delr/10,2.d0/ write(*,'(/a)') '*** MACRA ***' write(*,'(/5x,a,i4)') 'Number of shells: ',nshell write(*,'(/5x,a)') 'delta_r = ',delr c c Get the coordinates of the points on a sphere c open(11,file='points.dat',status='unknown') read(11,*) ncir do i=1,ncir read(11,*) cir(1,i),cir(2,i),cir(3,i) end do close(11)

Page 234: Computational Chemistry

Tasi Gyula: Számítógépes kémia

234

c rr=delr np=0 do kk=1,nshell distmin=1.d10 npp=0 rii=rr do i=1,ncir-1 xi=rii*cir(1,i) yi=rii*cir(2,i) zi=rii*cir(3,i) do j=i+1,ncir xj=rii*cir(1,j) yj=rii*cir(2,j) zj=rii*cir(3,j) dist=dsqrt((xi-xj)**2+(yi-yj)**2+(zi-zj)**2) if(distmin.gt.dist) distmin=dist end do end do do i=1,natoms rii=rr do 40 j=1,ncir xp=rii*cir(1,j)+coord(1,i) yp=rii*cir(2,j)+coord(2,i) zp=rii*cir(3,j)+coord(3,i) do 50 l=1,natoms if(l.eq.i) goto 50 dist=dsqrt((xp-coord(1,l))**2 +(yp-coord(2,l))**2 +(zp-coord(3,l))**2) ril=rr if(dist.lt.ril) goto 40 50 continue np=np+1 npp=npp+1 p(1,np)=xp p(2,np)=yp p(3,np)=zp 40 continue end do write(*,'(a,i5,a,i5)') & 'shell #',kk,' *** Number of points:',npp write(*,'(a,f13.6,a,f13.6)') 'rr=',rr,' distmin=',distmin rr=rr+distmin end do return end

Legyen az első példánk a vízmolekula. Először is határozzuk meg az izolált molekula egyensúlyi geometriáját az AM1 szemiempírikus kvantumkémiai módszerrel, a PcMol program [Tasi, G., Pálinkó, I., Halász, J., Náray-Szabó, G.: Semiempirical quantum chemical calculations on microcomputers, CheMicro, Budapest, 1992] segítségével. (A szemiempí-rikus kvantumkémiai módszerek az ab initio módszerekből (lásd a 14. projektet) vezethetők le bizonyos típusú integrálok elhagyásával, egyszerűsítésével és/vagy empírikus adatokkal való helyettesítésével.) A molekula számított egyensúlyi geometriája a várakozásnak megfelelően a C2v pontcsoportba tartozik. A következő ábrákon a molekula síkjában (x,y-

Page 235: Computational Chemistry

Tasi Gyula: Számítógépes kémia

235

sík) és az arra merőleges x,z-síkban felvett kontúrvonalas MEP-térképeket mutatjuk be. (A szintvonalakhoz tartozó értékek kJ/mol-ban vannak megadva.)

Látható, hogy a negatív régió az oxigénatom körül helyezkedik el. A két nemkötő elekton-párnak megfelelő lokális minimumok is megfigyelhetők. A MEP-függvény minimumait szimplex módszerrel pontosan meghatároztuk: az (1.37451,0.43626,0.53922) pontban -432.15 kJ/mol és az (1.37451, 0.43626,0.55927) pontban 432.15 kJ/mol a függvény értéke. (A koordináták Å-ben vannak megadva.)

Az EPCHG program számára szükséges inputfájlt is a PcMol programmal készítettük el. Az inputfájl tartalmának egy részét bemutatjuk:

Page 236: Computational Chemistry

Tasi Gyula: Számítógépes kémia

236

3 0.00000 240 1 0.036950 -0.042952 -0.018898 8 1.851655 0.039008 -0.018898 1 2.196578 1.822534 -0.018898 -3.4454576 -0.0429523 4.7742240 17.1875680 -3.3586876 4.4535980 1.8119115 37.0770976 -4.7537291 2.9233103 1.8119115 32.2494029 -5.5017629 0.9924125 1.8119115 27.2599948 -5.5017629 -1.0783171 1.8119115 21.4090804 …

-0.0062737 9.5647536 2.5965446 16.8867106

5.7845506 9.0281547 -2.6343405 9.6597345

2.9392923 9.8377005 -2.6343405 13.6616934

-0.0062737 9.5647536 -2.6343405 16.8867124

Az alábbiakban pedig a számítási eredmények láthatók:

ATOMIC CARTESIAN COORDINATES (A.U.) ATOM X(I) Y(I) Z(I) H 0.036950 -0.042952 -0.018898 O 1.851655 0.039008 -0.018898 H 2.196578 1.822534 -0.018898 ELEMENTS OF MATRIX A 1 2 3 4 1 3.50718 3.44942 3.45814 1.00000 2 3.44942 3.45851 3.48319 1.00000 3 3.45814 3.48319 3.56932 1.00000 4 1.00000 1.00000 1.00000 0.00000 ELEMENTS OF COLUMN MATRIX B B(1) = 0.02350 B(2) = 0.00701 B(3) = 0.02180 B(4) = 0.00000 EP ATOMIC CHARGES ATOM H: Q( 1) = 0.32397 ATOM 0: Q( 2) = -0.64850 ATOM H: Q( 3) = 0.32454 DIPOLE MOMENT (DEBYES) OF EP ATOMIC CHARGES: 1.85312 GOODNESS OF MEP FIT NUMBER OF POINTS: 240 SUM OF SQUARES (A.U.): 0.000009 RMSD (KCAL/MOL): 0.11987 %: 5.50557

A molekula kvantumkémiailag számított dipólusmomentuma 1.860 D. Az EP atomi töltések dipólusmomentuma (1.853 D) igen közel áll ehhez az értékhez. A kísérleti dipólusmomentum értéke 1.85 D. Tehát a kapott EP atomi töltésrendszerünk jól visszaadja a vízmolekula kísérleti és számított dipólusmomentumát és a molekula környezetében az elektrosztatikus teret (rmsd = 0.11987).

Legyen a második példánk a formamid-molekula. A molekula két lehetséges protonálódási centrummal rendelkezik: a karbonil-csoport oxigénatomja és az amino-csoport

Page 237: Computational Chemistry

Tasi Gyula: Számítógépes kémia

237

nitrogénatomja. Először is határozzuk meg az izolált molekula egyensúlyi geometriáját az AM1 szemiempírikus kvantumkémiai módszerrel. A molekula AM1 módszerrel optimált geometriája planáris. A molekula síkjában (x,y-sík) és az x,z-síkban számított AM1 kontúrvonalas MEP-térképeket a következő ábrák mutatják:

A MEP-térképeken két negatív régiót fedezhetünk fel: az egyiket az oxigénatom, a másikat a nitrogénatom körül. A formamid-molekula esetén is meghatároztuk a MEP-függvény minimumait szimplex módszerrel: az (1.56899,1.82886,0.01997) pontban 465.44 kJ/mol, a (2.72322,1.12596,0.01997) pontban 460.35 kJ/mol, a (0.08611,0.00436,1.04478) pontban 92.27 kJ/mol és a (0.08611,0.00427,1.00477) pontban 92.32 kJ/mol a függvény értéke. (A koordináták Å-ben vannak megadva.) A mélyebb minimumok kapcsolatosak az

Page 238: Computational Chemistry

Tasi Gyula: Számítógépes kémia

238

oxigénatommal. Ez összhangban van azzal a kísérleti tapasztalattal, hogy a molekula elsődleges protonálódási helye az oxigénatom.

Atomi töltések MEP-térképekből való számításának a lehetőségét a DGB programba is beépítettük (lásd a 14. projektet). Nagyobb molekulák esetén az előzőekben tárgyalt mód-szernél érdemes egyszerűbb modelleket is alkalmaznunk a számítások költségének csökken-tése érdekében. A részletek megtalálhatók a következő cikkekben: G. Tasi, I. Kiricsi, H. Förster: Representation of molecules by atomic charges: a new population analysis, J. Comput. Chem., 13, 371 (1992) és G. Tasi, I. Pálinkó, L. Nyerges, P. Fejes, H. Förster: Calculation of electrostatic potential maps and atomic charges for large molecules, J. Chem. Inf. Comput. Sci., 33, 296 (1993).

Feladatok:

15.1 Határozza meg a formamid-molekula alapállapotú egyensúlyi geometriáját HF/6-31G* és MP2/6-31G* elméleti szinteken! Ugyanezeken a szinteken számítson EP atomi töltéseket is a MACRA-algoritmus segítségével! A számításokhoz használja a DGB programot!

15.2 Az előző feladatot hajtsa végre AM1 és MNDO szinteken is a PcMol programmal!

15.3 A C-vitamin nem tartalmaz karboxil-csoportot, mégis aszkorbinsavnak nevezik. Hatá-rozza meg a C-vitamin alapállapotú egyensúlyi geometriáját, majd az EP atomi töltéseket HF/6-31G* szinten! Melyik hidrogén tűnik a legsavasabbnak a molekulában? Számítsa ki a molekula különböző konjugált bázisainak az energiáját is! Melyik ezek közül a legstabilabb? A kapott eredmény összhangban van a korábbi feltevésével?

15.4 Határozza meg a benzolmolekula AM1 MEP-térképét a PcMol program segítségével! A molekula mely része leggazdagabb elektronokban? Mely része a legszegényebb? Az elektofil ágens hol fogja a legvalószínűbben megtámadni a molekulát?

15.5 Határozza meg a MEP-térképét a piridin-molekulának, és vesse azt össze a benzoléval! A benzolmolekuláéhoz hasonlóan fog lejátszódni egy elektrofil támadás?

15.6 Az imidazol és a pirazol közepesen erős bázisok. Vizsgálja meg mindkét molekula MEP-térképét! Melyik nitrogénatom tűnik bázikusabbnak a molekulákban? Határozza meg az EP atomi töltéseket! Számítsa ki a kérdéses konjugált savak energiáit is! Melyik a bázikusabb a két molekula közül? Hasonlítsa össze a kérdéses vegyületek protonaffinitását is! Értelmezze a kapott számítási eredményeket!

15.7 A formaldehid-molekula elég kicsi ahhoz, hogy protonaffinitását a kísérleti hibahatáron belül meghatározzuk elméleti úton [G. Czakó, B. Nagy, G. Tasi, Á. Somogyi, J. Šimunek, J. Noga, B.J. Bastiaan, J.M. Bowman, A.G. Császár: Proton Affinity and Enthalpy of Formation of Formaldehyde, International Journal of Quantum Chemistry, 109, 2393 (2009)]. Határozza meg a molekula protonaffinitását HF/6-31G* és MP2/6-31G* szinteken! Vesse össze a kapott számítási eredményeket a legjobb kísérleti és a legjobb számítási eredményekkel!

15.8 Tanulmányozza a naftalin-molekula protonálódását különböző kvantumkémiai módszerekkel! Készítsen MEP-térképeket, és számítson EP atomi töltéseket! Melyik széna-

Page 239: Computational Chemistry

Tasi Gyula: Számítógépes kémia

239

tom a preferált centrum egy elektrofil támadás szempontjából? Vesse össze a kapott számítási eredményeket az irodalomban közölttekkel [G. Tasi, F. Mizukami, M. Toba, S. Niwa, I. Pálinkó: Molecular Electrostatics, Energetics, and Dynamics of the Alkylation of Naphthalene: Positional Isomerization of Monoalkylnaphthalenes at Hartree-Fock and Correlated Levels with BSSE Corrections, Journal of Physical Chemistry A, 104, 1337 (2000)]!