Molekuladinamika 3. Alkalmazások A módszer korlátai Egy velocity Verlet algoritmus SciLab-ban Alkalmazások A módszer korlátai
Egy velocity Verlet algoritmus SciLab-ban Ha feltételezzük, hogy az 𝐹 𝑖 erők állandók a Δ𝑡 időintervallumban, akkor a mozgásegyenlet kiintegrálható analitikusan és a következő alakot ölti 𝑟 𝑖 𝑛+1 = 𝑟 𝑖 𝑛 + 𝑣 𝑖 𝑛 Δ𝑡+ 1 2 𝐹 𝑖 𝑛 𝑚 𝑖 Δ 𝑡 2 ez lényegében a jól ismert négyezetes úttörvény s 𝑡 = 𝑠 0 + 𝑣 0 𝑡+ 1 2 𝑎 𝑡 2 a formula az 𝑟 𝑖 𝑡+Δ𝑡 = 𝑟 𝑖 𝑡 + 𝑑 𝑟 𝑖 𝑡 𝑑𝑡 Δ𝑡+ 1 2 𝑑 2 𝑟 𝑖 𝑡 𝑑 𝑡 2 Δ 𝑡 2 +… Taylor-sorból is származtatható Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban A sebesség pedig a gyorsulásnak a differenciálás „naiv” módszerére (lsd. korábbi előadás) alapozott közelítéséből számítható 𝑎 𝑖 𝑛+ 1 2 ≈ 𝑣 𝑖 𝑛+1 − 𝑣 𝑖 𝑛 Δ𝑡 valamint, hogy 𝑎 𝑖 𝑛+ 1 2 ≈ 𝐹 𝑖 𝑛+1 + 𝐹 𝑖 𝑛 2 𝑚 𝑖 átlagerő/tömeg tehát 𝑣 𝑖 𝑛+1 = 𝑣 𝑖 𝑛 + 𝐹 𝑖 𝑛+1 + 𝐹 𝑖 𝑛 2 𝑚 𝑖 Δ𝑡 Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban Velocity Verlet algoritmus összefoglalva 𝑟 𝑖 0 és 𝑣 𝑖 0 megadása, Δ𝑡 megválasztása Az erő 𝐹 =−grad𝑈 𝑟 (𝑡) kiszámítása az n-edik időlépésben Atomok mozgatása: 𝑟 𝑖 𝑛+1 = 𝑟 𝑖 𝑛 + 𝑣 𝑖 𝑛 Δ𝑡+ 𝐹 𝑖 𝑛 2 m i Δ 𝑡 2 Az erő 𝐹 =−grad𝑈 𝑟 (𝑡) kiszámítása az n+1-edik időlépésben Sebességek számítása: 𝑣 𝑖 𝑛+1 = 𝑣 𝑖 𝑛 + 𝐹 𝑖 𝑛+1 + 𝐹 𝑖 𝑛 2 𝑚 𝑖 Δ𝑡 Az idő léptetése: 𝑡=𝑡+Δ𝑡 Ismétlés amíg szükséges Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban Határfeltétel szabad részecskék (nincsenek falak) 3 2 1 6 7 5 4 Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban Potenciál minimum egyensúly grad𝑈=0 𝐹=0 Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban Ciklusokkal szervezett kód „szokásos” programnyelvekben (pl. C++) egy hatékony algoritmus SciLab-ban azonban nem az, mert a SciLab a ciklusműveleteket lassan dolgozza fel ahol lehet mátrixműveletekkel kell helyettesíteni Megjegyzés normált változókat használunk, azaz a potenciál paraméterek, Botzmann-állandó, atomok tömege egyenlő eggyel. Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban A script neve: md_ciklus.sce clear(); //******************** //bemeneti parameterek N = 64; //reszecskek szama L = 10; //kocka oldalhossza vMax = 0.1; //maximalis kezdeti sebessegkomponens n = ceil(N^(1.0/3.0)); //reszecskek szama a 3 koordinata iranyban d = L / n; //racsallando dt = 0.01; //idolepes Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban //************* //inicializalas //reszecskek kezdeti pozicioja i = 1; //reszecske szamlalo for x = 1:n for y = 1:n for z = 1:n if i <= N then r(i,1) = (x-1 + 0.5) * d; r(i,2) = (y-1 + 0.5) * d; r(i,3) = (z-1 + 0.5) * d; end i = i + 1; Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban //reszecskek kezdeti sebessege for i = 1:N for k = 1:3 v(i,k) = vMax * rand(1,'uniform'); end Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban //*********** // fuggvenyek function aa=gyorsulas(r) //gyorsulasok (F/m) szamitasa for i = 1:N //gyorsulasok nullazasa for k = 1:3 aa(i,k) = 0; end Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban for i = 1:N-1 //i-j parok tavolsagnegyzetenak szamitasa for j = i+1:N r2 = 0; for k = 1:3 rij(k) = r(i,k) - r(j,k); r2 = r2 + rij(k)^2; end //LJ: F = 4eps (12sig^12/rij^13 - 6sig^6/rij^6) = // rij 24 eps (2sig^12/rij^14 - sig^6/rij^7) = rij * f f = 24 * (2 * r2^(-7) - r2^(-4)); //eps = 1; sig = 1 //a = F/m, de m = 1 aa(i,k) = aa(i,k) + rij(k) * f; //i gyorsulasa j hatsara aa(j,k) = aa(j,k) - rij(k) * f; //j gyorsulasa i hatasara endfunction Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban function T = homerseklet(v) summa = 0; for i = 1:N for k = 1:3 summa = summa + v(i,k)^2; end T = summa / (3 * (N - 1)); //ekviparticio tetelebol a homerseklet; k_Botzmann=1 endfunction Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban //************************** //Velocity Verlet algoritmus fd=mopen(get_absolute_file_path('md_ciklus.sce')+'3D_data.out’,'wt') fd2=mopen(get_absolute_file_path('md_ciklus.sce')+'T.out’,'wt') for l = 1:1000 a = gyorsulas(r); // gyorsulas szamitasa az n-edik idolepesben (a_n) for i = 1:N for k = 1:3 r(i,k) = r(i,k) +v(i,k) * dt + 0.5 * a(i,k) * dt^2; v(i,k) = v(i,k) + 0.5 * a(i,k) * dt; // a sebesseg szamitasa elso fele // v_n+1=v_n+(a_n+a_n+1)/2*dt = 0.5*(v_n+a_n)*dt + 0.5*(v_n+a_n+1)*dt end Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban a = gyorsulas(r); // gyorsulas szamitasa az n+1-edik idolepesben (a_n+1), // a sebesseg szamitasahoz kell for i = 1:N for k = 1:3 v(i,k) = v(i,k) + 0.5 * a(i,k) * dt; // a sebesseg szamitasanak masodik fele; // a gyorsulas ujraszamolodik end Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban T(l) = homerseklet(v); mfprintf(fd,'%d\n', N); mfprintf(fd,'#S %d\n', l); for i = 1:N mfprintf(fd,'A '); for k = 1:3 mfprintf(fd,'%g ',r(i,k)); end mfprintf(fd,'\n'); mfprintf(fd2,'%g %g\n', l*dt, T(l)); mclose(fd); mclose(fd2); t = 1:l plot2d(t,T) Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban Valamelyest optimalizált algoritmus a ciklusműveletek kicserélése hatékony mátrixműveletekre az előző algoritmus futási idejének töredéke alatt fut le Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban A script neve: md.sce clear(); //******************** //bemeneti parameterek N = 64; //reszecskek szama L = 10; //kocka oldalhossza vMax = 0.1 //maximalis kezdeti sebessegkomponens n = ceil(N^(1.0/3.0)); //reszecskek szama a 3 koordinata iranyban d = L / n; //racsallando dt = 0.01; //idolepes Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban //************* //inicializalas //reszecskek kezdeti pozicioja i = 1; //reszecske szamlalo for x = 1:n for y = 1:n for z = 1:n if i <= N then r(i,1) = (x-1 + 0.5) * d; r(i,2) = (y-1 + 0.5) * d; r(i,3) = (z-1 + 0.5) * d; end i = i + 1; Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban //reszecskek kezdeti sebessege v = vMax * rand(N,3,'uniform'); Dr. Erdélyi Zoltán Számítógépes modellezés
Számítógépes modellezés //*********** // fuggvenyek function aa=gyorsulas() //gyorsulasok (F/m) szamitasa aa = zeros(N,3); //gyorsulasok nullazasa for i = 1:N-1 //i-j parok tavolsagnegyzetenak szamitasa rij = ones(N-i,1) * r(i,:) - r(i+1:N,:); r2 = sum(rij.^2,2); //LJ: F = 4eps (12sig^12/rij^13 - 6sig^6/rij^7) // = rij 24 eps (2sig^12/rij^14 - sig^6/rij^8) = rij * f f = 24 * (2 * r2.^(-7) - r2.^(-4)); //eps = 1; sig = 1 //a = F/m, de m = 1 F = rij .* [f f f]; ss = sum(F,1); aa(i,:) = aa(i,:) + ss; //i gyorsulasa j hatsara aa(i+1:N,:) = aa(i+1:N,:) - F; //j gyorsulasa i hatasara end endfunction Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban //************************** //Velocity Verlet algoritmus fd=mopen(get_absolute_file_path('md.sce')+'3D_data.out",'wt') fd2=mopen(get_absolute_file_path('md.sce')+'T.out",'wt') for l = 1:1000 a = gyorsulas(); // gyorsulas szamitasa az n-edik idolepesben (a_n) r = r +v * dt + 0.5 * a * dt^2; v = v + 0.5 * a * dt; // a sebesseg szamitasa elso fele // v_n+1=v_n+(a_n+a_n+1)/2*dt = 0.5*(v_n+a_n)*dt + 0.5*(v_n+a_n+1)*dt a = gyorsulas(); // gyorsulas szamitasa az n+1-edik idolepesben (a_n+1), // a sebesseg szamitasahoz kell v = v + 0.5 * a * dt; // a sebesseg szamitasa masodik fele Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban T(l) = sum(v.^2) / (3 * (N - 1)); //ekviparticio tetelebol a homerseklet; k_Botzmann=1 mfprintf(fd,'%d\n', N); mfprintf(fd,'#S %d\n', l); for i = 1:N mfprintf(fd,'A '); for k = 1:3 mfprintf(fd,'%g ',r(i,k)); end mfprintf(fd,'\n'); mfprintf(fd2,'%g %g\n', l*dt, T(l)) mclose(fd); mclose(fd2); t = 1:l; plot2d(t*dt,T) Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban Az algoritmus futásának eredménye hőmérséklet-idő Dr. Erdélyi Zoltán Számítógépes modellezés
Egy velocity Verlet algoritmus SciLab-ban atomok mozgása Dr. Erdélyi Zoltán Számítógépes modellezés
Számítógépes modellezés Alkalmazások Diffúziós együttható Szerkezeti tényezők Hőtágulási együttható Szabadenergia Hibadinamika Olvadáspont Hővezetés Kémiai reakció kinetika Kötési energia Molekuláris konformáció Fonon diszperzió Elasztikus tulajdonságok Plasztikus tulajdonságok Ütközési kaszkádok stb. Dr. Erdélyi Zoltán Számítógépes modellezés
Számítógépes modellezés A módszer korlátai Leginkább korlátozott részecskeszám korlátozott időskála Dr. Erdélyi Zoltán Számítógépes modellezés