Packing using Collision-Driven Molecular Dynamics [Romanian]

Original in English by Aleksandar Donev

Această pagina web conţine versiuni executabile de programe Fortran pentru generarea şi analiza cu ajutorul ambalajelor de particule două şi trei- dimensionale dure utilizînd un eveniment dinamic molecular, astfel cum sa explicat în această lucrare:

"Neighbor List Collision-Driven Molecular Dynamics Simulation for Nonspherical Particles. I. Algorithmic Details II. Applications to Ellipses and Ellipsoids", by A. Donev, F. H. Stillinger, and S. Torquato, J. Comp. Phys, 202(2): 737-764 (part I) and 765-793 (part II), 2005

De asemenea am lansat coduri sursă C + + (C++ source codes, și aceasta este o copie menţinută la nivel local, de pe site-ul grupului Torquato – Torquato group site) pentru o versiune mult mai dezbrăcată şi mai puţin eficientă de ceea ce numai ține de ocuparea cu ambalaje de sfere, cu toate acestea, într-un spațiu euclidian arbitrar dimensional.

Negare: Programele oferite aici sunt coduri generale molecular-dinamice. Ele pot fi folosite pentru a prepape ambalaje dezordonate blocate de particule dure, dacă sunt utilizate cu opţiunile corespunzătoare. Programele nu generează în mod automat ambalaje, încă numai ambalaje blocate. Aş fi bucuros să ajut la pregătirea fişierelor de configurare de intrare pentru a efectua orice activitate specifică, numai trimiteți-mi e-mail la aleks.donev@gmail.com.

Fișierul tar al tuturor executabilelor Linux şi fişierele de intrare necesare pentru a juca în jurul valorii determinate de un eveniment cu algoritmii MD şi să analizeze ambalaje rezultate este PackLSD.tar.gz, dar puteți să vă uitați, de asemenea, la lista de fişiere (list of files) în mod direct, deoarece, uneori, am adăugat acolo noi exectuabile.

Pentru moment dat eu am documentat doar opţiunile sferei de ambalare şi am ascuns restul, în scopul de a evita complexitatea suplimentară pentru elipsoide. Eu am ascuns, de asemenea, opţiuni referitoare la listele vecinilor şi alte optimizări care necesită familiaritate strânsă cu algoritm și ce sunt greu explicabile în detaliu. Contactaţi-mă dacă aveţi nevoie de mai mult, sau vedeți ultima secţiune din această pagină Web (Advanced Usage). Dacă utilizaţi această pentru a produce rezultate publicate, vă rugăm să vă referiți la lucrarea de mai sus.

Vă rugăm să citiţi cu atenţie următoarele instrucţiuni înainte de a pune intrebari, și, de asemenea, să priviți la exemplele mele!

Producerea ambalajelor folosind algotitmii MD

Binare pentru generarea de ambalajelor blocate folosind particule dure MD sunt PackLSD.static.x (sau pentru a obţine versiunea pe 64 de biţi pentru sisteme de x86_64 – 64-bit version) pentru ambalaje, care constau dintr-un număr mic de specii de particule (monodisperse, bidisperse, tridisperse, etc.), sau PackLSD.poly.static.x pentru ambalaje cu adevărat polydisperse în cazul în care fiecare particulă are o forma/dimensiune diferită. Executabile se leagă numai în biblioteci Linux standarde (OpenGL, libtiff, libjpeg, etc.), şi leagă openglut static, ce poate provoca erori pe unele sisteme. Programele sunt compilate la optimizare medie, pentru un procesor generic IA32, pe un sistem de operare Linux x86. Acestea ar trebui să ruleze pe majoritatea distribuțiilor Linux x86 foarte bine, şi sperăm că alte distribuţii similar tot vor suporta. Pentru a rula aceste sisteme pe x86_64, va trebui să aveți un oarecare sprijin de compatibilitate pentru executabile de 32 de biți.

Timpul de rulare a fişierului de intrare PackLSD.input sau PackLSD.poly.input este condus în executabil. Fişierul de intrare principal este o colecţie de liste de numi Fortran 90 ca în exemplele Input/PackLSD.nml şi Input/PackLSD.poly.nml. Numele de ambalare poate fi schimbat în interiorul PackLSD.input şi este folosit ca bază a tuturor fișierelor de intrare/ieşire (ca în numele de fișier PackLSD.nml). Programul de obicei, se imprimă atunci când fişierele sunt deschise sau închise. Executabilul trebuie să fi rulat într-un director unde vor fi sub-directoare numite Input, Output, Stats, Data, Scenes, Plots, și VRML, şi fişierele vor fi plasate sau citite din aceste subdirectoare. Fişierul nml trebuie să fie în directorul de intrare, precum şi fişiere de ieşire de ambalare vor fi salvate în Data. Eu am documentat opţiunile de care aveţi nevoie în fişierul nml şi am eliminat majoritatea altora (unele trebuie să fie lăsat deoarece valorile implicite nu sunt adecvate pentru utilizări generice). Cele mai multe opţiuni sunt aceleaşi pentru ambele programe PackLSD.static.x și PackLSD.poly.static.x, precum şi diferenţe minore pot fi observate în exemplul Input/PackLSD.poly.nml. Vă rugăm să mă întrebaţi dacă unele opțiuni nu sunt clare.

Procesele simulării de un anumit număr de evenimente MD (coliziuni), sunt numite etape (stage). La sfârşitul fiecărei etape anumite statistici sunt de ieşire, eventual, de un fişier temporar salvat, ecranul OpenGL se reîmprospătează, vitezele particulelor rescalate etc. Multe etape pot fi executate până ce este atinsă blocarea, astfel cum sunt definite de opţiunile din fişier listei de numi. Executabil poate folosi OpenGL pentru a face pe ecran procesul de ambalare astfel încât să puteţi vedea ce se întâmplă. Aveţi posibilitatea să utilizaţi mouse-ul pentru zoom, rotire, etc. Există, de asemenea, opţiuni pentru a genera imagini instantanee, care pot fi folosite pentru a face animaţii (Eu foarte recomand formatul de fişier MNG! – MNG file format)

Analizarea ambalajelor

Ambalaje produse pot fi ulterior vizualizate/analizate cu ajutorul programelor ProcessPacking.static.x și ProcessPacking.poly.static.x. În special, puteţi face rendering folosind OpenGL, face grafice, sau a calcula perechi a funcţiilor de corelare g2 (r) sau factorul de structură S (k), precum şi să construiţi şi faceți rendering la NNL-uri (liste de aproape vecini) pe baza de proximitate sau vecinilor lui Delaunay/Voronoi. Fişierul de intrare este lista de numi Input/ProcessPacking.nml în subdirectorul de intrare. Acesta conţine observaţii care descriu diverse domenii de intrare. În 2D se poate genera cifre frumoase EPS pentru a le include în lucrări, şi în 3D eu am oferit unele modele VRML (VRML models). Acestea nu sunt documentate în detaliu (învaţăți uitându-se la exemple, deşi cunoştinţele de VRML tot sunt necesare). Factorul structurei (anizotropic, vectorul k) în 3D este salvat ca un fişier VTK, care poate fi privit cu ajutorul programului de randare VisIt.

Formate de fişiere

Fişierele de intrare/ieşire de ambalare utilizează un format care ar trebui să fie uşor de înţeles, priviți exemplul fişierului Data/LSD.HS.mono.3D.N=1000.1.dat. Pentru ambalaje care conţin un număr mic de specii de particule (mono, bidisperse, etc), acest format este un fisier de text ASCII, după cum urmează:

n_dims ! Euclidian space dimensionality (2 or 3)
N dispersity ! Total number of particles and number of species
N_1 N_2 ... ! Number of particles of each specie
D_1 D_2... ! Sphere diameters for each specie
Lambda ! Lattice vectors for unit cell
T T T ! Periodic or hard wall boundaries
x1 y1 z1 ! Coordinates of first sphere center
x2 y2 z2 ! second, etc...
...

Formatul este puțin diferit pentru ambalaje cu adevărat polidisperse, diametrul particulelor specifice după coordonatele fiecărei particule:

n_dims
N dispersity
N_1 N_2 ... ! One for each specie (each specie is a distribution for polydisperse packings, rather than a fixed size)
Lambda ! Unit cell
T T T ! Periodic or hard wall
x1 y1 z1 D1
x2 y2 z2 D2
...

Reţele de contact/vecine (Contact/Neighbour networks) sunt scrise la fişierele care se încheie cu ".nnl.dat" și au următorul format:

M2 N M
1 N_1
j1_1  k1_1  l1_1
j1_2  k1_2  l1_2
...
2 N_2
j2_1 k2_1 l2_1
....

Aici M2 este numărul total de persoane de contact listate în fişier. Aceasta include ambele direcţii pentru contacte între particule, şi M oferă numărul total de contacte fără a dubla contabilizare (M = M2/2 cu periodice BC, dar aceasta se poate modifica dacă este inclus perete dur de vecini). N este numărul total de particule. Apoi vine o listă a tuturor datelor de contact a particulelor 1 N_1, listate unul după altul, în cazul în care j1_1 este particula vecină, k1_1 este o unitate de identificator de imagine celulară (explicat pe scurt) şi l1_1 este puterea de interacţiunea dintre cele două particule ca (forţă — poate fi ignorat în cazul în care nu e necesar, dar trebuie sa fie acolo ca un număr în virgulă mobilă), etc. Identificatori de imagine sunt utilizați pentru condiţiile limitei periodice pentru a indica date de contact de trecere a torului şi este explicată în lucrare menţionată mai sus pe această pagină. Acesta este zero în cazul în care contactul este între particule în celula a unității de bază. După ce toate persoanele de contact pentru particule 1 au fost enumerate, acelaşi lucru se întâmplă pentru particule 2, etc. Reţineţi că, în cazul în care un vecin de particule este negativ ce indică faptul peretelui dur, cu
vecin =- (2 * N + k)
unde k indică faptul existenței pereţilor 2d.

Utilizare avansată: lista completa de opţiuni legate cu lista de numi

Odată ce v-ați familiarizat cu funcţionarea de bază a programelor de mai sus, şi ați citit referințe necesare, puteți, de asemenea, să încercaţi să utilizaţi caracteristicile mai avansate, cum ar fi în liste de vecini apropiați (NNL-uri). Pentru codurile de ambalare-generare, fişierul de intrare PackLSD.full.input conţine toate opţiunile de intrare. Fișierul de intrare a listei de numi Input/PackLSD.2D.nml conţine toate opţiunile de intrare (acesta este configurat pentru 2D, cu generalizarea evidentă la 3D). Pentru analiza de ambalaje, conţine lista completă de opţiuni de intrare, și lista de numi Input/ProcessPacking.2D.nml, conţine o listă cu toate opţiunile disponibile. Vă recomandăm să adăugați opţiunile treptat, devenind familiarizaţi cu ele în primul rând, şi, de asemenea, asigurându-vă că versiunea de program executabil pe care îl utilizaţi nu este învechită şi acceptă opţiunea data a listei de numi (de când adăug noi opţiuni tot timpul — cazul în care o opţiune nu este recunoscută, în doar comentați-l şi cereți un executabil actualizat). Nu este trivial de a decide care opţiune este compatibilă cu alte opţiuni sau care opţiune este necesară atunci când este setat careva steaguri. Jucați-vă cu aceasta şi pune-mi întrebări, dacă este necesar.

Există, de asemenea, o versiune a codurilor de ambalare care generează ambalare a superelipselor şi superelipsoidelor. Acest lucru este pus în aplicare de hacking a codului elipsoidului, care se include în exponenţii superelipsoidei. Reţineţi că acest cod numeric este sensibil pentru exponenţii mari, şi, de asemenea, că este mult mai lent decât codurile de elipsoide obișnuite. Reţineţi, de asemenea, că listele de vecini apropiați şi, totul ce le solicită nu funcţionează pentru superelipsoide, deoarece aşa-numitul potenţial interior suprapus nu a fost încă pus în aplicare (sau generalizat teoretic) la superelipsoide. Programe executabile care funcţionează cu superelipsoide sunt PackLSD.super.static.x și ProcessPacking.super.static.x. Ca un exemplu de utilizare, încercaţi:

PackLSD.super.static.x <PackLSD.super.inputProcessPacking.super.static.x <ProcessPacking.full.input

ok ok