Analiza i wizualizacja danych. Analiza danych mikroskopowych a) własności dynamiczne b) własności strukturalne. Opracowanie wyników OriginLab. Wizualizacja geometrii molekularnej. a) Biblioteka OpenGL b) Przykład animacji.
Funkcja autokorelacji void inline VAFFunction(double *Cvv, POS **Tab,int NUMOL) int t_max,t; register int tau,i; double ATA,NOM,AVEAGE,INVESION; INVESN=.0/NUMOL; for(t=0;t<tt-tco;t++) AVEAGE = 0.0; t_max = tt - t; for(i=0;i<numol;i++) ATA = 0.0; NOM = 0.0; for(tau=;tau<t_max;tau++) ATA += (Tab[i][tau].x*Tab[i][tau+t].x + Tab[i][tau].y*Tab[i][tau+t].y + Tab[i][tau].z*Tab[i][tau+t].z); NOM += (Tab[i][tau].x*Tab[i][tau].x + Tab[i][tau].y*Tab[i][tau].y + Tab[i][tau].z*Tab[i][tau].z); ATA /= t_max; NOM /= t_max; AVEAGE += ATA/NOM; Cvv[t] = AVEAGE*INVESN;
Mieszanina Ar 0 Kr (VAF),0,,0 0,4 0,8 0,8 0,8 0, C v (t) 0,6 0,4 I(ω) [ps] 0,4 C v (t) 0,6 0,4 I(ω) [ps] 0, 0, 0, 0,0 0 0 40 60 80 00 0 40 60 80 ω [cm - ] 0, 0,0 0 0 40 60 80 00 0 40 60 80 ω [cm - ] 0,0 0,0-0, -0, 0 0 0 0 40 50 t [ps] 0 4 6 8 0 t [ps]
Odchylenie średniokwadratowe void inline MSDFunction(double *Cvv,int NUMOL) register int tau,i; int t_max,t, N6=6*NUMOL; double ATA,AVEAGE; for(t=0;t<tt-tco;t++) AVEAGE = 0.0; t_max = tt - t; for(i=0;i<numol;i++) ATA = 0.0; for(tau=;tau<t_max;tau++) ATA+=((T[i][tau].x-T[i][tau+t].x)*(T[i][tau].x-T[i][tau+t].x))+ ( (T[i][tau].y-T[i][tau+t].y) * (T[i][tau].y-T[i][tau+t].y) )+ ( (T[i][tau].z-T[i][tau+t].z) * (T[i][tau].z-T[i][tau+t].z) ); ATA /= t_max; AVEAGE += ATA; Cvv[t]=AVEAGE/N6;
Klaster atomowy Ar (MSD) 0 T=6.9 K 5 0 <Δr (t)> [Å ] 5 0 5 T=4.49 K 0 T=.07 K 0 50 00 50 00 t [ps]
Funkcja radialnego rozkładu Prawdopodobieństwo znalezienia atomu w odległości z Przedziału (r,r+dr) od dowolnego atomu odniesienia. g( r) = r+ dr r 4πξ p( ξ ) dξ Zad. Napsać program W kostce o boku L, losowo rozrzucać 00 punktów, tak aby minimalna Odległość między nimi niebyła mniejsza niż 0.5. Policzyć f. radialnego rozkładu dla L=00,50,0. r+dr
Funkcja radialnego rozkładu void inline FunctionDF(double sigma,double Del, double *HIST,int NUMOL,int start) int Bin; POS ij; double tij; for(i=start;i<numol;i++) for(j=i+;j<numol;j++) ij.x=m[i].cm[0].x-m[j].cm[0].x; ij.y=m[i].cm[0].y-m[j].cm[0].y; ij.z=m[i].cm[0].z-m[j].cm[0].z; tij=srt( (ij.x*ij.x) + (ij.y*ij.y) + (ij.z*ij.z)); Bin = (int) (tij/(del*sigma))+; if(bin<esolution) HIST[Bin]+=.0;
Normalizacja void inline NormDF(double sigma,double Del,double *TAB, int t,int NUMOL) double lower,upper,nideal; for(int i=0;i<esolution;i++) lower=(double)i*(del*sigma); upper=lower+(del*sigma); Nideal=stala*((upper*upper*upper)-(lower*lower*lower)); TAB[i]=TAB[i]/(double)(t*NUMOL*Nideal);
Klaster atomów argonu a) b),0,0,5,5 DF,0 DF,0 0,5 0,5 0,0 r/σ 0,0 r/σ
Ciało stałe
Indykator przejść fazowych Średnia fluktuacja wzajemnej odległości między molekułami. Indeks Lindemanna δ L = N( N ) N ij ij i< j < rij > ( < r > < r > ) Zad. Napisać program na obliczanie powyższej formuły. Ustalić dane wejściowe i dane wyjściowe, zakładamy że kroki czasowe z symulacji zebrane są w tablicy.
Indykator przejść fazowych 0. 0. δ L 0. 0.0 00 00 00 T [K]
Mezogeny + + + + + + = 4 4 4 4 4 4 4 4 4 4 4 4 ij Analiza fazy ciekłokrystalicznej. Parametry mikroskopowe: Środek masy: r, v, a otacje: & & &,,
Program (M rotacji) void inline BuildotMatrixT(int n) A[0] = *M[n].[0].*M[n].[0]. + *M[n].[0].4*M[n].[0].4 -; A[] = *M[n].[0].*M[n].[0]. - *M[n].[0].*M[n].[0].4; A[] = *M[n].[0].*M[n].[0]. + *M[n].[0].*M[n].[0].4; A[] = *M[n].[0].*M[n].[0]. + *M[n].[0].*M[n].[0].4; A[4] = *M[n].[0].*M[n].[0]. + *M[n].[0].4*M[n].[0].4 -; A[5] = *M[n].[0].*M[n].[0]. - *M[n].[0].*M[n].[0].4; A[6] = *M[n].[0].*M[n].[0]. - *M[n].[0].*M[n].[0].4; A[7] = *M[n].[0].*M[n].[0]. + *M[n].[0].*M[n].[0].4; A[8] = *M[n].[0].*M[n].[0]. + *M[n].[0].4*M[n].[0].4 -;
Macierz porządku Qij = cosθi cosθ j δ ij / Θi -kąt pomiedzy długą osią molekuły a directorem n.
Macierz porządku = ) ( Q X ij = ) ( Q X ij τ = = N k k X ij X ij Q N Q ) ( ) (
Program (M. porządku) void inline BuildOrderMatrixUX() float wq[9]; int i; wq[0]=*a[0]*a[0]-; wq[]=*a[0]*a[]; wq[]=*a[0]*a[6]; wq[]=wq[]; wq[4]=*a[]*a[]-; wq[5]=*a[]*a[6]; wq[6]=wq[]; wq[7]=wq[5]; wq[8]=*a[6]*a[6]-; for(i=0;i<9;i++) Q[i]+=wQ[i];
Wartości i wektory własne QA = λa det( Q Iλ) = 0 Diagonalizacja macierzy (procedura Jakobiego). Wektor własny odpowiadający największej wartości własnej jest directorem n wskazującym kierunek uporządkowania, a ta wartość własna jest parametrem porządku drugiego rzędu. P (cos Θ)
Program /4 float inline GetOrder(char *name) float W, Is,beta; float DirN[],lVect[]; int isn=0,n,ang; ZeroMatrix(Q); for(n=0;n<n;n++) if(strcmpi(m[n].name,name)==0) BuildotMatrixT(n); BuildOrderMatrixUX(); isn++;
Program /4 AveMatrixU(Q,isN); ConvMatrix(Q); nrot=0; jacobi(matq,, AigD, MatX, &nrot); float val=0; int num=0; for(int k=0;k<;k++) val= max(val,aigd[k]); if(val==aigd[k])num=k; for(n=0;n<;n++) DirN[n]=MatX[n][num]; W=val;
Program /4 for(n=0;n<n;n++) if(strcmpi(m[n].name,name)==0) BuildotMatrixT(n); ZeroMatrix(Q); BuildOrderMatrixUX(); ConvMatrix(Q); nrot=0; jacobi(matq,, AigD, MatX, &nrot); val=0; num=0; for(k=0;k<;k++) val= max(val,aigd[k]); if(val==aigd[k])num=k;
Program 4/4 for(k=0;k<;k++) lvect[k]=matx[k][num]; //Obliczanie kąta miedzy direktorem a wektorem długiej osi Is=DirN[0]*lVect[0]+DirN[]*lVect[]+DirN[]*lVect[]; beta=(float)acos(is); beta=beta*(float)80.0f/(float)m_pi; ang=(int)beta; odkat[ang]++; return W;
Wykres P 0.8 P (cosβ) 0.6 0.4 0. 00 00 00 T [K]
Funkcja orientacyjnego rozkładu Prawdopodobieństwo znalezienia orientacji molekuły z przedziału (β, β+dβ) względem orientacji direktora. β
Wykres odf.6.4. 0.40 0.5 0.0.0 0.5 P(β) 0.8 P(β) 0.0 0.6 0.5 0.4 0.0 0. 0.05 0.0 0 0 40 60 80 00 0 40 60 80 β [degrees] 0.00 0 0 40 60 80 00 0 40 60 80 β [degrees] Faza stała Faza ciekła Zad. Analiza danych. Na podstawie danych zawartych w pliku odf.txt, zrobić wykres oraz określić największą ilość molekuł o tym samym zwrocie.
Własności dielektryczne ), ( ), ( ) ( t n N i N j j ij t n p m Q d M = = = r r,, i i i i i i z y x i z y x i j i ij d d d d d d d d d d d + + = = = r r r r Całkowity moment dipolowy molekuły. (n,t) oznacza zależność od ilości molekuł i czasu.
Własności dielektryczne Funkcja autokorelacji momentu dipolowego. Φ( t) = r r M (0) M ( t) r r M (0) M (0) <> rozumiane jako średnia po układzie i czasie. Zespolona przenikalność dielektryczna. ε ( ν ) = ε ( ν ) + iε ( ν ) jest związana z f. autokorelacji momentu dipolowego następująca relacją.
. Własności dielektryczne ε( ν ) = AI[ Φ& ( t)] A = Vk B T Transformata Fouriera 0 iπνt I[ f ] = dte f ( t) Absorpcja dielektryczna: ε ν ν ( ) = A e I[ Φ( t)] ε ''( ν ) = Aν 0 dtφ( t)cos(πνt)
Własności dielektryczne(kod) int inline Genelax(int w,int n,int idx,char *name) int k=w; if(strcmpi(m[n].name,name)==0) int plus[00],minus[00],plus=0,minus=0,l; float Cplus=0.0,Cminus=0.0; for(l=0;l<m[n].nsite;l++) if(m[n].c[l]>0.0) plus[plus]=l; plus++; Cplus+=M[n].c[l]; if(m[n].c[l]<0.0) minus[minus]=l; minus++; Cminus+=M[n].c[l];
Własności dielektryczne(kod) Cminus=Cminus/(float)e; Cplus=Cplus/(float)e; //---------------------------------------------------------------- POS dip; memset(&dip,0,sizeof(pos)); for(i=0;i<minus;i++) for(j=0;j<plus;j++) dip.x += (M[n].[minus[i]].x-M[n].[plus[j]].x)*M[n].c[minus[i]]; dip.y += (M[n].[minus[i]].y-M[n].[plus[j]].y)*M[n].c[minus[i]]; dip.z += (M[n].[minus[i]].z-M[n].[plus[j]].z)*M[n].c[minus[i]];
Własności dielektryczne(kod) Tdipol[k][idx].x=dip.x*Cminus; Tdipol[k][idx].y=dip.y*Cminus; Tdipol[k][idx].z=dip.z*Cminus; k++; //if name //---------------------------------------------------------------- return k;
Absorpcja dielektryczna 0 0 Φ(t) 0 - T=70 K T=00 K T=40 K 0 -.0.5 0 0 0 0 0 0 4 t [ps] T=70 K T=00 K T=40 K ε " (ν).0 0.5 0.0 0 8 0 9 0 0 0 ν[hz]
Absorpcja dielektryczna Model KWW (Kohlrausch-Wiliams-Watt) Φ( t) = Aexp( ( t / τ KWW ) β ) Dopasowanie parametrów na podstawie symulacji. ównane Arrheniusa ln ν = max ln ν 0 E a / k B T Ea - energia aktywacji. (Średnia energia niezbędna do obrócenia molekuł)
Absorpcja dielektryczna. 0.8 MD data Linear fit ln(ν max [Hz]) 0.4 0.0 9.6.8x0 -.x0 -.6x0 - /T [K - ]