<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vsud</id>
	<title>Física Computacional - Contribuições do usuário [pt-br]</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vsud"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php/Especial:Contribui%C3%A7%C3%B5es/Vsud"/>
	<updated>2026-04-16T15:17:42Z</updated>
	<subtitle>Contribuições do usuário</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=684</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=684"/>
		<updated>2016-10-07T15:55:04Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Pressupostos teóricos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: ''o deslocamento quadrático médio'' e a ''autocorrelação de velocidades''. &lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com o coeficiente de transporte chamado difusão: a quantificação do modo em que uma substância se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''. A constante de difusão tem unidades SI de &amp;lt;math&amp;gt;[D]=m^{2}/s&amp;lt;/math&amp;gt;. Em unidades reduzidas para o caso de um potencial Lennard-Jones, a constante de difusão tem unidades &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. Talvez estas unidades fiquem mais claras após verificar o método de calculo deste coeficiente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Outras propriedades dinâmicas podem ser citadas, como a condutividade térmica, condutividade elétrica e viscosidade.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit, páginas 87-90 (ref. [1]). As deduções partem da ''Lei de Fick'', que estipula que a difusão de uma substância é proporcional à variação da concentração dela: &amp;lt;math&amp;gt;\vec{j}=-D\nabla c&amp;lt;/math&amp;gt;, o sinal de menos indica que o fluxo de difusão é no sentido para onde a concentração dimunui.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas no sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(\Delta t) - x_{0i})^2+(y_{i}(\Delta t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein conseguiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dD\Delta t &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas (&amp;lt;math&amp;gt;d=2&amp;lt;/math&amp;gt;, em nosso caso bidimensional). Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{\Delta t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto \Delta t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2D\Delta t^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto \Delta t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto \Delta t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos qualitativos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anterior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto. Caso forem corrigidas, é necessário manter para cada partícula uma variável que represente o número de vezes que ela atravessou a parede em um sentido.&lt;br /&gt;
&lt;br /&gt;
Definiremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referência que estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if( t &amp;gt;= numMSD*dt ){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado com potencial do tipo Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numMSD'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Autocorrelação de velocidades==&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \frac1N \sum_{i=1}^{N}v_{x,i}(\tau)v_{x,i}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A autocorrelação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades pode assumir valores negativos, e deste caso, as velocidades estão anti-correlacionadas, ou seja, é mais provável que depois de um intervalo de tempo a componente da velocidade tenha invertido seu sentido.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t \to \infty) = 0&amp;lt;/math&amp;gt;, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor ''Zvel''. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''Zvel''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numZ'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevíssimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruidoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Constante de difusão ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Scatterplot_difusao.png|300px|thumb|right|Scatterplot para a constante de difusão quando calculadas via os dois métodos sugeridos nesta página.]]&lt;br /&gt;
&lt;br /&gt;
É possível assim comparar as constantes de difusão obtidas para as diferentes densidades de partículas num sistema com potencial do tipo Lennard-Jones. Lembrando que, neste caso, sua unidade é &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Para calculá-la via MSD, basta dividir por 4 o coeficiente da reta ajustada. Já pelo método da autocorrelação de velocidades, o próprio valor da integral é a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
É possível verificar que os valores em geral se aproximam, especialmente para densidade maiores (neste caso deve haver o cuidado na escolha da região para o ajuste da reta, dado que o coeficiente tende a se anular e tonar constante), já para poucas partículas, onde a difusão é maior, a diferença se tornou um pouco mais relevante e acredita-se que pode ser reduzida com médias sobre mais dados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=570</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=570"/>
		<updated>2016-06-20T13:35:32Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Uma introdução teórica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: ''o deslocamento quadrático médio'' e a ''autocorrelação de velocidades''. &lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com o coeficiente de transporte chamado difusão: a quantificação do modo em que uma substância se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''. A constante de difusão tem unidades SI de &amp;lt;math&amp;gt;[D]=m^{2}/s&amp;lt;/math&amp;gt;. Em unidades reduzidas para o caso de um potencial Lennard-Jones, a constante de difusão tem unidades &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. Talvez estas unidades fiquem mais claras após verificar o método de calculo deste coeficiente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Outras propriedades dinâmicas podem ser citadas, como a condutividade térmica, condutividade elétrica e viscosidade.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit, páginas 87-90 (ref. [1]). As deduções partem da ''Lei de Fick'', que estipula que a difusão de uma substância é proporcional à variação da concentração dela: &amp;lt;math&amp;gt;\vec{j}=-D\nabla c&amp;lt;/math&amp;gt;, o sinal de menos indica que o fluxo de difusão é no sentido para onde a concentração dimunui.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas no sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(\Delta t) - x_{0i})^2+(y_{i}(\Delta t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein conseguiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dD\Delta t &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas (&amp;lt;math&amp;gt;d=2&amp;lt;/math&amp;gt;, em nosso caso bidimensional). Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{\Delta t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto \Delta t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2D\Delta t^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto \Delta t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto \Delta t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos qualitativos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anterior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto. Caso forem corrigidas, é necessário manter para cada partícula uma variável que represente o número de vezes que ela atravessou a parede em um sentido.&lt;br /&gt;
&lt;br /&gt;
Definiremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referência que estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if( t &amp;gt;= numMSD*dt ){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado com potencial do tipo Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numMSD'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Autocorrelação de velocidades==&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A autocorrelação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades pode assumir valores negativos, e deste caso, as velocidades estão anti-correlacionadas, ou seja, é mais provável que depois de um intervalo de tempo a componente da velocidade tenha invertido seu sentido.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t \to \infty) = 0&amp;lt;/math&amp;gt;, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor ''Zvel''. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''Zvel''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numZ'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevíssimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruidoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Constante de difusão ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Scatterplot_difusao.png|300px|thumb|right|Scatterplot para a constante de difusão quando calculadas via os dois métodos sugeridos nesta página.]]&lt;br /&gt;
&lt;br /&gt;
É possível assim comparar as constantes de difusão obtidas para as diferentes densidades de partículas num sistema com potencial do tipo Lennard-Jones. Lembrando que, neste caso, sua unidade é &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Para calculá-la via MSD, basta dividir por 4 o coeficiente da reta ajustada. Já pelo método da autocorrelação de velocidades, o próprio valor da integral é a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
É possível verificar que os valores em geral se aproximam, especialmente para densidade maiores (neste caso deve haver o cuidado na escolha da região para o ajuste da reta, dado que o coeficiente tende a se anular e tonar constante), já para poucas partículas, onde a difusão é maior, a diferença se tornou um pouco mais relevante e acredita-se que pode ser reduzida com médias sobre mais dados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=569</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=569"/>
		<updated>2016-06-20T13:35:16Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Uma introdução teórica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: ''o deslocamento quadrático médio'' e a ''autocorrelação de velocidades''. &lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com o coeficiente de transporte chamado difusão: a quantificação do modo em que uma substância se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''. A constante de difusão tem unidades SI de &amp;lt;math&amp;gt;[D]=m^{2}/s&amp;lt;/math&amp;gt;. Em unidades reduzidas para o caso de um potencial Lennard-Jones, a constante de difusão tem unidades &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. Talvez estas unidades fiquem mais claras após verificar o método de calculo deste coeficiente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Outras propriedades dinâmicas podem ser citadas, como a condutividade térmica, condutividade elétrica e viscosidade.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit, páginas 87-90 (ref. [1]). As deduções partem da ''Lei de Fick'', que estipula que a difusão de uma substância é proporcional à variação da concentração dela: &amp;lt;math&amp;gt;\vec{j}=-D\nabla c&amp;lt;/math&amp;gt;, o sinal de menos indica que o fluxo de difusão é no sentido para onde a concentração dimunui.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas no sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(\Delta t) - x_{0i})^2+(y_{i}(\Delta t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein conseguiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dD\Delta t &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas (&amp;lt;math&amp;gt;d=2&amp;lt;/math&amp;gt;, em nosso caso bidimensional). Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{\Deltat \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto \Delta t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2D\Delta t^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto \Delta t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto \Delta t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos qualitativos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anterior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto. Caso forem corrigidas, é necessário manter para cada partícula uma variável que represente o número de vezes que ela atravessou a parede em um sentido.&lt;br /&gt;
&lt;br /&gt;
Definiremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referência que estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if( t &amp;gt;= numMSD*dt ){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado com potencial do tipo Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numMSD'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Autocorrelação de velocidades==&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A autocorrelação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades pode assumir valores negativos, e deste caso, as velocidades estão anti-correlacionadas, ou seja, é mais provável que depois de um intervalo de tempo a componente da velocidade tenha invertido seu sentido.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t \to \infty) = 0&amp;lt;/math&amp;gt;, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor ''Zvel''. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''Zvel''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numZ'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevíssimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruidoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Constante de difusão ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Scatterplot_difusao.png|300px|thumb|right|Scatterplot para a constante de difusão quando calculadas via os dois métodos sugeridos nesta página.]]&lt;br /&gt;
&lt;br /&gt;
É possível assim comparar as constantes de difusão obtidas para as diferentes densidades de partículas num sistema com potencial do tipo Lennard-Jones. Lembrando que, neste caso, sua unidade é &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Para calculá-la via MSD, basta dividir por 4 o coeficiente da reta ajustada. Já pelo método da autocorrelação de velocidades, o próprio valor da integral é a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
É possível verificar que os valores em geral se aproximam, especialmente para densidade maiores (neste caso deve haver o cuidado na escolha da região para o ajuste da reta, dado que o coeficiente tende a se anular e tonar constante), já para poucas partículas, onde a difusão é maior, a diferença se tornou um pouco mais relevante e acredita-se que pode ser reduzida com médias sobre mais dados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=567</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=567"/>
		<updated>2016-06-20T13:32:20Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: ''o deslocamento quadrático médio'' e a ''autocorrelação de velocidades''. &lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com o coeficiente de transporte chamado difusão: a quantificação do modo em que uma substância se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''. A constante de difusão tem unidades SI de &amp;lt;math&amp;gt;[D]=m^{2}/s&amp;lt;/math&amp;gt;. Em unidades reduzidas para o caso de um potencial Lennard-Jones, a constante de difusão tem unidades &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. Talvez estas unidades fiquem mais claras após verificar o método de calculo deste coeficiente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Outras propriedades dinâmicas podem ser citadas, como a condutividade térmica, condutividade elétrica e viscosidade.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit, páginas 87-90 (ref. [1]). As deduções partem da ''Lei de Fick'', que estipula que a difusão de uma substância é proporcional à variação da concentração dela: &amp;lt;math&amp;gt;\vec{j}=-D\nabla c&amp;lt;/math&amp;gt;, o sinal de menos indica que o fluxo de difusão é no sentido para onde a concentração dimunui.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas no sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein conseguiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas (&amp;lt;math&amp;gt;d=2&amp;lt;/math&amp;gt;, em nosso caso bidimensional). Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos qualitativos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anterior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto. Caso forem corrigidas, é necessário manter para cada partícula uma variável que represente o número de vezes que ela atravessou a parede em um sentido.&lt;br /&gt;
&lt;br /&gt;
Definiremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referência que estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if( t &amp;gt;= numMSD*dt ){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado com potencial do tipo Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numMSD'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Autocorrelação de velocidades==&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A autocorrelação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades pode assumir valores negativos, e deste caso, as velocidades estão anti-correlacionadas, ou seja, é mais provável que depois de um intervalo de tempo a componente da velocidade tenha invertido seu sentido.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t \to \infty) = 0&amp;lt;/math&amp;gt;, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor ''Zvel''. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''Zvel''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numZ'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevíssimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruidoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Constante de difusão ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Scatterplot_difusao.png|300px|thumb|right|Scatterplot para a constante de difusão quando calculadas via os dois métodos sugeridos nesta página.]]&lt;br /&gt;
&lt;br /&gt;
É possível assim comparar as constantes de difusão obtidas para as diferentes densidades de partículas num sistema com potencial do tipo Lennard-Jones. Lembrando que, neste caso, sua unidade é &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Para calculá-la via MSD, basta dividir por 4 o coeficiente da reta ajustada. Já pelo método da autocorrelação de velocidades, o próprio valor da integral é a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
É possível verificar que os valores em geral se aproximam, especialmente para densidade maiores (neste caso deve haver o cuidado na escolha da região para o ajuste da reta, dado que o coeficiente tende a se anular e tonar constante), já para poucas partículas, onde a difusão é maior, a diferença se tornou um pouco mais relevante e acredita-se que pode ser reduzida com médias sobre mais dados. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Scatterplot_difusao.png&amp;diff=564</id>
		<title>Arquivo:Scatterplot difusao.png</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Scatterplot_difusao.png&amp;diff=564"/>
		<updated>2016-06-20T13:23:45Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=560</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=560"/>
		<updated>2016-06-20T13:01:39Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: ''o deslocamento quadrático médio'' e a ''autocorrelação de velocidades''. &lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com o coeficiente de transporte chamado difusão: a quantificação do modo em que uma substância se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''. A constante de difusão tem unidades SI de &amp;lt;math&amp;gt;[D]=m^{2}/s&amp;lt;/math&amp;gt;. Em unidades reduzidas para o caso de um potencial Lennard-Jones, a constante de difusão tem unidades &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. Talvez estas unidades fiquem mais claras após verificar o método de calculo deste coeficiente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Outras propriedades dinâmicas podem ser citadas, como a condutividade térmica, condutividade elétrica e viscosidade.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit, páginas 87-90 (ref. [1]). As deduções partem da ''Lei de Fick'', que estipula que a difusão de uma substância é proporcional à variação da concentração dela: &amp;lt;math&amp;gt;\vec{j}=-D\nabla c&amp;lt;/math&amp;gt;, o sinal de menos indica que o fluxo de difusão é no sentido para onde a concentração dimunui.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas no sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein conseguiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas (&amp;lt;math&amp;gt;d=2&amp;lt;/math&amp;gt;, em nosso caso bidimensional). Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos qualitativos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anterior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto. Caso forem corrigidas, é necessário manter para cada partícula uma variável que represente o número de vezes que ela atravessou a parede em um sentido.&lt;br /&gt;
&lt;br /&gt;
Definiremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referência que estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if( t &amp;gt;= numMSD*dt ){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado com potencial do tipo Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numMSD'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Autocorrelação de velocidades==&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A autocorrelação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades pode assumir valores negativos, e deste caso, as velocidades estão anti-correlacionadas, ou seja, é mais provável que depois de um intervalo de tempo a componente da velocidade tenha invertido seu sentido.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t \to \infty) = 0&amp;lt;/math&amp;gt;, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor ''Zvel''. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''Zvel''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. Para produzir os dados de todas as figuras, utilizou-se um passo de tamanho 0.01, esperando-se 5000 passos para começar as medições, e então fez-se a média sobre 9 medições por partícula (correspondendo à um tempo final de 500 e um ''numZ'' de 5000).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevíssimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruidoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=446</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=446"/>
		<updated>2016-06-08T19:45:04Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: ''o deslocamento quadrático médio'' e a ''autocorrelação de velocidades''. &lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com o coeficiente de transporte chamado difusão: a quantificação do modo em que uma substância se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''. A constante de difusão tem unidades SI de &amp;lt;math&amp;gt;[D]=m^{2}/s&amp;lt;/math&amp;gt;. Em unidades reduzidas, a constante de difusão tem unidades &amp;lt;math&amp;gt;[D]=\sqrt{\frac{\epsilon}{m}} \sigma&amp;lt;/math&amp;gt;. Talvez estas unidades fiquem mais claras após verificar o método de calculo deste coeficiente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Outras propriedades dinâmicas podem ser citadas, como a condutividade térmica, condutividade elétrica e viscosidade.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit, páginas 87-90 (ref. [1]). As deduções partem da ''Lei de Fick'', que estipula que a difusão de uma substância é proporcional à variação da concentração dela: &amp;lt;math&amp;gt;\vec{j}=-D\nabla c&amp;lt;/math&amp;gt;, o sinal de menos indica que o fluxo de difusão é no sentido para onde a concentração dimunui.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas no sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein conseguiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas (&amp;lt;math&amp;gt;d=2&amp;lt;/math&amp;gt;, em nosso caso bidimensional). Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos qualitativos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anterior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto. Caso forem corrigidas, é necessário manter para cada partícula uma variável que represente o número de vezes que ela atravessou a parede em um sentido.&lt;br /&gt;
&lt;br /&gt;
Definiremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referência que estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if( t &amp;gt;= numMSD*dt ){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Autocorrelação de velocidades==&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A autocorrelação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades pode assumir valores negativos, e deste caso, as velocidades estão anti-correlacionadas, ou seja, é mais provável que depois de um intervalo de tempo a componente da velocidade tenha invertido seu sentido.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t \to \infty) = 0&amp;lt;/math&amp;gt;, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor ''Zvel''. Consideramos que o ''counter'' é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''Zvel''. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevíssimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruidoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=442</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=442"/>
		<updated>2016-06-08T18:51:56Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Pressupostos teóricos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades é uma função par, ou seja, para intervalos de tempo negativos ela possuí o mesmo valor que para intervalos de tempo positivos, afinal, no produto das velocidades, a ordem não importa, e sim o tamanho da diferença de tempo.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t \to \infty) = 0&amp;lt;/math&amp;gt;, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=441</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=441"/>
		<updated>2016-06-08T18:51:40Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Pressupostos teóricos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades é uma função par, ou seja, para intervalos de tempo negativos ela possuí o mesmo valor que para intervalos de tempo positivos, afinal, no produto das velocidades, a ordem não importa, e sim o tamanho da diferença de tempo.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t \to \infty)=&amp;lt;/math&amp;gt;0, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=440</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=440"/>
		<updated>2016-06-08T18:51:31Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Pressupostos teóricos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades é uma função par, ou seja, para intervalos de tempo negativos ela possuí o mesmo valor que para intervalos de tempo positivos, afinal, no produto das velocidades, a ordem não importa, e sim o tamanho da diferença de tempo.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t \to \inftyy)=&amp;lt;/math&amp;gt;0, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=439</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=439"/>
		<updated>2016-06-08T18:51:05Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Pressupostos teóricos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades é uma função par, ou seja, para intervalos de tempo negativos ela possuí o mesmo valor que para intervalos de tempo positivos, afinal, no produto das velocidades, a ordem não importa, e sim o tamanho da diferença de tempo.&lt;br /&gt;
&lt;br /&gt;
O limite &amp;lt;math&amp;gt;Z(t\goto\infty)=&amp;lt;/math&amp;gt;0, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=438</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=438"/>
		<updated>2016-06-08T18:50:50Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Pressupostos teóricos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
A ''Autocorrelação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Ela nos diz o quanto a velocidade está correlacionada com a velocidade a &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; passos atrás. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto hora é positivo e hora é negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podemos relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com a integral sobre o tempo de uma autocorrelação (das velocidades de cada partícula). Tais relações são chamadas ''relações de Green-Kubo'' e podem ser aplicadas para outros coeficientes (por exemplo: viscosidade, condutividade térmica, condutividade elétrica. Mais detalhes verifique ref. [1], página 90). &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente por razões óbvias. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão, desde que garanta-se que a correlação de velocidade já tenha chegado à zero (vide exemplos).&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade (aceleração) é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos, a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
Interessante notar que a correlação de velocidades em 0 é a energia cinética da componente x em unidades reduzidas: &amp;lt;math&amp;gt;Z_{x}(0) = v_{x}(0)v_{x}(0) = K_{x}(0)&amp;lt;/math&amp;gt;. Também é interessante o fato de que a função de correlação de velocidades é uma função par, ou seja, para intervalos de tempo negativos ela possuí o mesmo valor que para intervalos de tempo positivos, afinal, no produto das velocidades, a ordem não importa, e sim o tamanho da diferença de tempo.&lt;br /&gt;
&lt;br /&gt;
O limite Z(t\goto\infty)=0, ou seja, nada podemos prever sobre a velocidade da partícula depois de um tempo infinitamente grande baseado na velocidade dela neste instante.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_1.jpg&amp;diff=437</id>
		<title>Arquivo:Zdes 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_1.jpg&amp;diff=437"/>
		<updated>2016-06-08T18:28:21Z</updated>

		<summary type="html">&lt;p&gt;Vsud: Vsud enviou uma nova versão de &amp;amp;quot;Arquivo:Zdes 1.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_08.jpg&amp;diff=436</id>
		<title>Arquivo:Zdes 08.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_08.jpg&amp;diff=436"/>
		<updated>2016-06-08T18:28:06Z</updated>

		<summary type="html">&lt;p&gt;Vsud: Vsud enviou uma nova versão de &amp;amp;quot;Arquivo:Zdes 08.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_06.jpg&amp;diff=435</id>
		<title>Arquivo:Zdes 06.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_06.jpg&amp;diff=435"/>
		<updated>2016-06-08T18:27:38Z</updated>

		<summary type="html">&lt;p&gt;Vsud: Vsud enviou uma nova versão de &amp;amp;quot;Arquivo:Zdes 06.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes005.jpg&amp;diff=434</id>
		<title>Arquivo:Zdes005.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes005.jpg&amp;diff=434"/>
		<updated>2016-06-08T18:27:21Z</updated>

		<summary type="html">&lt;p&gt;Vsud: Vsud enviou uma nova versão de &amp;amp;quot;Arquivo:Zdes005.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_005.jpg&amp;diff=433</id>
		<title>Arquivo:Zdes 005.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_005.jpg&amp;diff=433"/>
		<updated>2016-06-08T18:26:25Z</updated>

		<summary type="html">&lt;p&gt;Vsud: Vsud enviou uma nova versão de &amp;amp;quot;Arquivo:Zdes 005.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_1.jpg&amp;diff=401</id>
		<title>Arquivo:Zdes 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_1.jpg&amp;diff=401"/>
		<updated>2016-05-30T19:24:50Z</updated>

		<summary type="html">&lt;p&gt;Vsud: Vsud enviou uma nova versão de &amp;amp;quot;Arquivo:Zdes 1.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=400</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=400"/>
		<updated>2016-05-30T18:59:57Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Implementação computacional */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto horas é positivo e horas negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podes relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com uma grandeza microscópica (a velocidade de cada partícula). Tais relações são chamadas ''relações de Green-Kubo''. &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu ''Data&amp;gt;Import'', selecione o arquivo recém gerado, dê ''Ok'' e ''Cancel''. Depois, vá em ''Data&amp;gt;Transformation&amp;gt;Integration'', selecione em ''Load'' a opção ''Sum only'' e o valor registrado na caixa abaixo da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=399</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=399"/>
		<updated>2016-05-30T18:55:59Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Análise de resultados e exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto horas é positivo e horas negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podes relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com uma grandeza microscópica (a velocidade de cada partícula). Tais relações são chamadas ''relações de Green-Kubo''. &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu Importar. Selecione e carregue o arquivo recém gerado. Depois, vá em Ferramentas&amp;gt;Transformações&amp;gt;Integração, clique na opção &amp;quot;Sum only&amp;quot; e o valor registrado na caixa ao lado da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=398</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=398"/>
		<updated>2016-05-30T18:55:49Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Exemplos e análises dos resultados */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto horas é positivo e horas negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podes relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com uma grandeza microscópica (a velocidade de cada partícula). Tais relações são chamadas ''relações de Green-Kubo''. &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu Importar. Selecione e carregue o arquivo recém gerado. Depois, vá em Ferramentas&amp;gt;Transformações&amp;gt;Integração, clique na opção &amp;quot;Sum only&amp;quot; e o valor registrado na caixa ao lado da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difusão D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=397</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=397"/>
		<updated>2016-05-30T18:55:37Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Exemplos e análises dos resultados */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto horas é positivo e horas negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podes relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com uma grandeza microscópica (a velocidade de cada partícula). Tais relações são chamadas ''relações de Green-Kubo''. &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu Importar. Selecione e carregue o arquivo recém gerado. Depois, vá em Ferramentas&amp;gt;Transformações&amp;gt;Integração, clique na opção &amp;quot;Sum only&amp;quot; e o valor registrado na caixa ao lado da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através do valor da integral. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=396</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=396"/>
		<updated>2016-05-30T18:55:07Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Exemplos e análises dos resultados */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto horas é positivo e horas negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podes relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com uma grandeza microscópica (a velocidade de cada partícula). Tais relações são chamadas ''relações de Green-Kubo''. &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu Importar. Selecione e carregue o arquivo recém gerado. Depois, vá em Ferramentas&amp;gt;Transformações&amp;gt;Integração, clique na opção &amp;quot;Sum only&amp;quot; e o valor registrado na caixa ao lado da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos da Correlação de Velocidades em função do intervalo de tempo &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; podem ser observados para diferentes densidades do sistema simulado com um potencial Lennard-Jones. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 005.jpg|Z(t) para uma densidade de 5%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes005.jpg|Z(t) para uma densidade de 20%. É possível perceber o comportamento correlacionado da velocidade para pequenos intervalos de tempo e que esta correlação decaí rapidamente à zero, onde aparece ruidoso. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 06.jpg|Z(t) para uma densidade de 56%. É possível perceber um brevíssimo comportamento correlacionado da velocidade e em seguida um rápido decaimento à zero. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 08.jpg|Z(t) para uma densidade de 81%. Não é possível perceber um comportamento correlacionado da velocidade, senão para um tempo brevissimo em que as velocidades aparecem anti-correlacionadas, ou seja, as partículas vibram com sentidos opostos. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
Ficheiro:Zdes 1.jpg|Z(t) para uma densidade de 100%. Para altas densidades nota-se a falta de correlação e o comportamento altamente ruídoso, pois devido a vibração das partículas, as velocidades trocam de orientação rapidamente. A integração foi realizada no intervalo [0, 50]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As integrações foram realizadas com o programa XM Grace.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_1.jpg&amp;diff=395</id>
		<title>Arquivo:Zdes 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_1.jpg&amp;diff=395"/>
		<updated>2016-05-30T18:39:56Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_08.jpg&amp;diff=394</id>
		<title>Arquivo:Zdes 08.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_08.jpg&amp;diff=394"/>
		<updated>2016-05-30T18:39:48Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_06.jpg&amp;diff=393</id>
		<title>Arquivo:Zdes 06.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_06.jpg&amp;diff=393"/>
		<updated>2016-05-30T18:39:38Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes005.jpg&amp;diff=392</id>
		<title>Arquivo:Zdes005.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes005.jpg&amp;diff=392"/>
		<updated>2016-05-30T18:39:27Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_005.jpg&amp;diff=391</id>
		<title>Arquivo:Zdes 005.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Zdes_005.jpg&amp;diff=391"/>
		<updated>2016-05-30T18:27:23Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=390</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=390"/>
		<updated>2016-05-27T15:44:27Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Implementação computacional */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto horas é positivo e horas negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podes relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com uma grandeza microscópica (a velocidade de cada partícula). Tais relações são chamadas ''relações de Green-Kubo''. &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Vamos apenas medir a correlação entre a componente x da velocidade. Nosso programa apenas fornecerá os pontos do gráfico de &amp;lt;math&amp;gt;Z(\tau):\tau&amp;lt;/math&amp;gt; , e, para integrá-lo, é possível usar um algoritmo numérico, ou um programa como o ''XM Grace''. &lt;br /&gt;
&lt;br /&gt;
Declararemos um vetor ''Zvel'', que tenha ''numZ'' posições(cada posição corresponderá há um intervalo de passos diferente). Também será necessário um vetor para armazenar a componente x da velocidade no instante definido como zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numZ 1000 //Intervalo máximo de tempo medido&lt;br /&gt;
double *Zvel = (double *)malloc(numZ*sizeof(double)); // Vetor com os valores de Z(t);&lt;br /&gt;
double *vx_zero = (double *)malloc(NP*sizeof(double)); // Vetor com os valores de vx(0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criaremos uma função ''vel_correl'' que mede a correlação entre as velocidades. Para isso, a declaremos da seguinte forma, enviando as velocidades ''vx'' atuais, as salvas como &amp;lt;math&amp;gt;v_{x}(0)&amp;lt;/math&amp;gt;, quantos passos estamos desde a definição de 0 e o vetor que armazenamos os valores calculados:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''vel_correl''. Tomaremos o cuidado de garantir que calcularemos a correlação de velocidades após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros numZ passos com um ''if'').&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor Zvel. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; para cada intervalo. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(passo &amp;gt;= numZ){&lt;br /&gt;
 		vel_correl(vx, vx_zero, passo % numZ, Zvel);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numZ'' varia de 0, quanto tomaremos nossos valores de referência, até ''numZ-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o Z a cada passo. Geralmente programas não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''vel_correl'', que, caso o parâmetro ''ref'' é zero, toma as velocidades atuais como referência. Se não, calcula o produto entre a velocidade atual e a velocidade de referência, fazendo a média sobre essa informação das partículas e salvando no vetor Zvel. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void vel_correl (double *vx, double *vx_zero, int ref, double *Zvel){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref==0){ //Se a ref é 0, então...&lt;br /&gt;
&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
    vx_zero[i]=vx[i]; //... é o momento de tomar as velocidades atuais como referência&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double Zaux=0; // Essa variável vai acumular a soma das correlações das partículas&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	Zaux = Zaux + vx[i]*vx_zero[i];&lt;br /&gt;
&lt;br /&gt;
Zvel[ ref ]+= Zaux/NP; //Aqui acumulamos a correlação média por partícula das velocidades&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numZ'', dando assim o valor de vezes em que se acumulou o valor de Z(t) por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numZ;    //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numZ; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)Zvel[i]/counter); //Impressão&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo então constará:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.000000	0.484037&lt;br /&gt;
0.010000	0.465207&lt;br /&gt;
0.020000	0.463353&lt;br /&gt;
0.030000	0.460682&lt;br /&gt;
0.040000	0.457317&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença de tempo reduzido entre o valor de referência e o valor de medição, e a segundo coluna é o valor de &amp;lt;math&amp;gt;Z(\tau)&amp;lt;/math&amp;gt; médio do sistema.&lt;br /&gt;
&lt;br /&gt;
Para integrar esta função no XM Grace, por exemplo, para obter o valor do coeficiente de difusão, primeiro é necessário garantir que tomou-se ''numZ'' grande o suficiente para a correlação ter caído para próximo de 0. Então é possível abrir o programa no terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; xmgrace&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
E ir no menu Importar. Selecione e carregue o arquivo recém gerado. Depois, vá em Ferramentas&amp;gt;Transformações&amp;gt;Integração, clique na opção &amp;quot;Sum only&amp;quot; e o valor registrado na caixa ao lado da opção é o valor da integral sobre toda a curva importada.&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=389</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=389"/>
		<updated>2016-05-27T14:23:57Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Pressupostos teóricos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então a função correlação das velocidades é dada por:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
Z_{x}(\tau)= \bar{v}_{x}(\tau)\bar{v}_{x}(0)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. &amp;lt;math&amp;gt;\tau=0&amp;lt;/math&amp;gt; é um instante arbitrariamente escolhido.&lt;br /&gt;
&lt;br /&gt;
Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as contribuições da soma sobre as correlações sobre todas as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto horas é positivo e horas negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, podes relacionar a correlação das velocidades das partículas de nosso sistema de tal forma que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}Z_{x}(\tau)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que esta equação relaciona uma grandeza macroscópica (a difusão) com uma grandeza microscópica (a velocidade de cada partícula). Tais relações são chamadas ''relações de Green-Kubo''. &lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=388</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=388"/>
		<updated>2016-05-27T14:03:36Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Deslocamento quadrático médio==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uma introdução teórica ===&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
=== Análise de resultados e exemplos ===&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
==Correlação de velocidades==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pressupostos teóricos ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}\bar{v}_{x}(\tau)\bar{v}_{x}(0)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. Note que esta equação relaciona uma grandeza macroscópica (a difusão) com uma grandeza microscópica (a velocidade de cada partícula). Tais relações são chamadas ''relações de Green-Kubo''. Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto horas é positivo e horas negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, o que esta relação nos diz, é que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
=== Implementação computacional ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemplos e análises dos resultados ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=387</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=387"/>
		<updated>2016-05-26T23:29:46Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
Ambas essas medidas estão relacionadas com a difusão, o modo em que uma substâncias se espalha em um meio. Particularmente, em nosso caso, as moléculas simuladas se difundem (espalham) no próprio meio, o que chamamos de ''autodifusão''.&lt;br /&gt;
 &lt;br /&gt;
As deduções das equações apresentadas fogem do escopo desta página. Todas elas, porém, podem ser encontradas no livro ''Understanding Molecular Simulation'', de D. Frankel e B. Smit. [1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
* Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \infty} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pressupostos teóricos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema em função do intervalo do tempo. Se definirmos &amp;lt;math&amp;gt; \tau=t''-t'&amp;lt;/math&amp;gt;  , ou seja, uma grandeza de intervalo de tempo, então:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D = \int_{0}^{\infty}\bar{v}_{x}(\tau)\bar{v}_{x}(0)d\tau&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O mesmo vale para a componente cartesiana y da velocidade. Note que esta equação relaciona uma grandeza macroscópica (a difusão) com uma grandeza microscópica (a velocidade de cada partícula). Tais relações são chamadas ''relações de Green-Kubo''. Sua interpretação pode ser dividida em dois momentos:&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo curto: em média, a velocidade das partículas tem a mesma direção que ela tinha alguns passos atrás. Assim, o produto destas velocidades é positivo e as partículas se somam.&lt;br /&gt;
&lt;br /&gt;
* Para intervalo de tempo longo: a velocidade das partículas pode ou não estar na mesma direção que ela tinha a vários passos atrás. Assim, o produto horas é positivo e horas negativo, e então a soma sobre todas as partículas se anulam. A correlação é aproximadamente zero.&lt;br /&gt;
&lt;br /&gt;
Note que, quanto mais tempo as partículas andam para a mesma direção, mais elas se deslocam do ponto de origem (se difundem!). Assim, o que esta relação nos diz, é que quanto maior a correlação entre as velocidades, maior a difusão.&lt;br /&gt;
&lt;br /&gt;
Dada a integral imprópria, seria impossível obter dados infinitamente. Felizmente a correlação decaí a zero, e as contribuições à integral tornam-se desprezíveis. Assim, é possível observar o sistema em tempo finito e obter, a partir da integral, um bom valor para a constante de difusão.&lt;br /&gt;
&lt;br /&gt;
Num potencial como Lennard-Jones, uma maior densidade de partículas significa mais forças atuando e portanto a variação da velocidade é maior. Assim, as velocidades em diferentes instantes logo se descorrelacionam. Para sistemas menos densos a correlação de velocidades se mantém por mais tempo.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemplos e análises dos resultados ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Referências =&lt;br /&gt;
&lt;br /&gt;
[1] Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=386</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=386"/>
		<updated>2016-05-10T13:04:20Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Análise de resultados e exemplos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
-Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável, mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Análises do expoente da relação do MSD com o tempo nos diferentes intervalos pode ser obtida através de um gráfico ''log'' x ''log''.&lt;br /&gt;
&lt;br /&gt;
Note que, pela fórmula apresentada anteriormente, podemos obter o coeficiente de difução D através das inclinações das retas ajustadas. Note que quanto maior a densidade, menor este coeficiente, pois menos difuso é o sistema.&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=385</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=385"/>
		<updated>2016-05-10T12:54:42Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
-Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
A seguir alguns exemplos de gráficos do Mean Square Displacement podem ser observados para diferentes densidades do sistema simulado. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 005.jpg|MSD para uma densidade de 5%. É possível perceber o comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 02.jpg|MSD para uma densidade de 20%. É possível perceber um breve comportamento balístico inicial e então o comportamento linear. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 06.jpg|MSD para uma densidade de 56%. Para altas densidades o comportamento balístico inicial já não é tão notável e mas o comportamento linear continua ocorrendo. O ajuste linear foi realizado no intervalo [10, 50].&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 08.jpg|MSD para uma densidade de 81%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O tempo para atingir um comportamento linear começa a ser maior. O ajuste linear foi realizado no intervalo [15, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido.&lt;br /&gt;
&lt;br /&gt;
Ficheiro:Msd 1.jpg|MSD para uma densidade de 100%. Para altas densidades nota-se o comportamento linear altamente ruídoso, devido a vibração das partículas. O ajuste linear foi realizado no intervalo [10, 50]. Na escala do eixo ordenado é possível observar que os deslocamentos são pequenos em unidades de comprimento reduzido. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_1.jpg&amp;diff=384</id>
		<title>Arquivo:Msd 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_1.jpg&amp;diff=384"/>
		<updated>2016-05-10T12:43:35Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_08.jpg&amp;diff=383</id>
		<title>Arquivo:Msd 08.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_08.jpg&amp;diff=383"/>
		<updated>2016-05-10T12:39:57Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_06.jpg&amp;diff=382</id>
		<title>Arquivo:Msd 06.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_06.jpg&amp;diff=382"/>
		<updated>2016-05-10T12:37:58Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_02.jpg&amp;diff=381</id>
		<title>Arquivo:Msd 02.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_02.jpg&amp;diff=381"/>
		<updated>2016-05-10T12:36:06Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_005.jpg&amp;diff=380</id>
		<title>Arquivo:Msd 005.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Msd_005.jpg&amp;diff=380"/>
		<updated>2016-05-10T12:31:14Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=379</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=379"/>
		<updated>2016-05-07T23:10:01Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Uma introdução teórica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
-Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o regime balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidas ou gasosas, quando inicialmente, além da difusão, há também um impulso unidirecional.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=378</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=378"/>
		<updated>2016-05-07T23:05:25Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Uma introdução teórica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
-Regime confinado: &amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime subdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-Regime normalmente difusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime superdifusivo: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime balístico: &amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o sistema balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidos e gasosos.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=377</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=377"/>
		<updated>2016-05-07T23:04:47Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Uma introdução teórica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
-Regime confinado: :&amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime subdifusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-Regime normalmente difusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime superdifusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime balístico: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. Já o sistema balístico ocorre para pequenos intervalos de tempo em simulações de fases líquidos e gasosos.&lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=376</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=376"/>
		<updated>2016-05-07T22:48:56Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Uma introdução teórica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2dDt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
Na equação acima d é o número de dimensões simuladas. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
-Regime confinado: :&amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime subdifusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-Regime normalmente difusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime superdifusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. &lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=375</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=375"/>
		<updated>2016-05-07T22:40:08Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Uma introdução teórica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Regimes.jpg|300px|thumb|right|Exemplos dos regimes de difusão que podem ser compreendidos com o MSD em função do tempo reduzido.]]&lt;br /&gt;
&lt;br /&gt;
A equação acima é válida para simulações em duas dimensões. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
-Regime confinado: :&amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime subdifusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-Regime normalmente difusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime superdifusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. &lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Regimes.jpg&amp;diff=374</id>
		<title>Arquivo:Regimes.jpg</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Regimes.jpg&amp;diff=374"/>
		<updated>2016-05-07T22:37:37Z</updated>

		<summary type="html">&lt;p&gt;Vsud: Exemplos dos regimes de Mean Square Displacement em função do tempo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exemplos dos regimes de Mean Square Displacement em função do tempo&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=373</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=373"/>
		<updated>2016-05-07T22:16:52Z</updated>

		<summary type="html">&lt;p&gt;Vsud: /* Uma introdução teórica */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
[[Arquivo:Translational motion.gif|300px|thumb|right|É possível acompanhar o movimento das partículas vermelhas nessa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.]]&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A equação acima é válida para simulações em duas dimensões. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
-Regime confinado: :&amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime subdifusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-Regime normalmente difusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
-Regime superdifusivo: :&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. &lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Translational_motion.gif&amp;diff=372</id>
		<title>Arquivo:Translational motion.gif</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Arquivo:Translational_motion.gif&amp;diff=372"/>
		<updated>2016-05-07T21:18:49Z</updated>

		<summary type="html">&lt;p&gt;Vsud: É possível acompanhar o movimento das partículas vermelhas essa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;É possível acompanhar o movimento das partículas vermelhas essa dinâmica. Como quantificar o quanto elas se movem em um intervalo de tempo? Um dos métodos possíveis é determinar o Deslocamento Quadrático Médio, uma função do tempo.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=371</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=371"/>
		<updated>2016-05-06T16:50:35Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A equação acima é válida para simulações em duas dimensões. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt;: Regime confinado &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;: Regime subdifusivo&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt;: Regime normalmente difusivo &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt;: Regime superdifusivo&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. &lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langle r^{2} \rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=370</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=370"/>
		<updated>2016-05-06T16:50:07Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A equação acima é válida para simulações em duas dimensões. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = \langle r^{2}_c \rangle &amp;lt;/math&amp;gt;: Regime confinado &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;: Regime subdifusivo&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt;: Regime normalmente difusivo &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt;: Regime superdifusivo&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. &lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor ''double'' com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (''NP'' = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Valores de deslocamento MSD(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''MSDf''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''MSDf''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		MSDf(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''MSDf'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Se não, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor ''msd''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void MSDf (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0){ //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
}else{&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=1; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No arquivo apontado por ''arq'', constará ao final do programa:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.010000	0.000145&lt;br /&gt;
0.020000	0.000580&lt;br /&gt;
0.030000	0.001303&lt;br /&gt;
0.040000	0.002314&lt;br /&gt;
...             ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde a primeira coluna é a diferença entre o tempo da medição e o tempo de referência. A segunda coluna é o valor de &amp;lt;math&amp;gt;\langler^{2}\rangle&amp;lt;/math&amp;gt; para este intervalo de tempo. &lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=369</id>
		<title>Medidas dinâmicas</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Medidas_din%C3%A2micas&amp;diff=369"/>
		<updated>2016-05-06T16:38:51Z</updated>

		<summary type="html">&lt;p&gt;Vsud: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Página em construção]&lt;br /&gt;
&lt;br /&gt;
Em Dinâmica Molecular são chamadas de Medidas (ou Propriedades) Dinâmicas aquelas características do sistema que variam no tempo. Aqui, apresentaremos duas medidas dinâmicas de interessante importância: o deslocamento quadrático médio e a correlação entre velocidades.&lt;br /&gt;
&lt;br /&gt;
=Deslocamento quadrático médio=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uma introdução teórica ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O ''Deslocamento quadrático médio'', do inglês ''Mean square displacement'' (MSD), é uma medida da capacidade de dispersão (difusão) das partículas do sistema. Ela representa a média dos quadrados dos deslocamentos em relação à uma posição anterior de referência de cada partícula (Note que a média dos deslocamentos das partículas é nula, pois o centro de massa não se move, por isso a necessidade de tomarmos os quadrados).&lt;br /&gt;
Matematicamente, podemos expressar:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;{\rm MSD}\equiv\langle (\vec{r}-\vec{r_0})^2 \rangle=\frac{1}{N}\sum_{i=1}^N (x_{i}(t) - x_{0i})^2+(y_{i}(t) - y_{0i})^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o MSD é uma função do tempo (na verdade, do intervalo de tempo) e portanto estamos interessados em estudar como esta função varia no tempo. &lt;br /&gt;
&lt;br /&gt;
Em dinâmicas com fases líquidas e gasosas, teremos então o fenômeno da dispersão. As partículas irão &amp;quot;caminhar&amp;quot; por todo o espaço permitido em um movimento aleatório. Este movimento é conhecido como movimento Browniano e fui estudando por grandes cientistas, como Albert Einstein. Einstein consegiu modelar o deslocamento quadrático médio como uma função linear do tempo, e determinou uma constante chamada de constante de difusão (D):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A equação acima é válida para simulações em duas dimensões. Assim, este é um método amplamente usado para quantificar a difusão do sistema. Qualitativamente, classifica-se os sistemas enquanto ao MSD da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \lim_{t \to \inf} \langle (\vec{r}-\vec{r_0})^2 \rangle = &amp;lt;r^{2}_c&amp;gt; &amp;lt;/math&amp;gt;: Regime confinado &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, 0&amp;lt;\alpha&amp;lt;1&amp;lt;/math&amp;gt;: Regime subdifusivo&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle = 2Dt^{1} &amp;lt;/math&amp;gt;: Regime normalmente difusivo &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \langle (\vec{r}-\vec{r_0})^2 \rangle \propto t^{\alpha}, \alpha&amp;gt;1 &amp;lt;/math&amp;gt;: Regime superdifusivo&lt;br /&gt;
&lt;br /&gt;
Em uma dinâmica com um estado sólido, esperamos que as partículas apenas vibrem, e não se deslocam grandes distâncias. Portanto, o MSD terá um limite e diremos que o regime é confinado, pois as partículas não têm espaço para se difundirem. &lt;br /&gt;
&lt;br /&gt;
A imagem ao lado mostra o MSD em função do tempo para cada um destes casos.&lt;br /&gt;
&lt;br /&gt;
== Implementação computacional ==&lt;br /&gt;
&lt;br /&gt;
Primeiro é importante ressaltar que precisamos comprar a posição da partícula com a posição da mesma partícula em um tempo anteior de referência, sem levar em consideração o condições de contorno periódicas. Nos trechos de códigos apresentados a seguir, consideraremos que as posições não são corrigidas quanto à este aspecto.&lt;br /&gt;
&lt;br /&gt;
Difiniremos primeiro um período de passos em que analisaremos o MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define numMSD 1000 // Período do MSD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alocaremos dinamicamente na memória um vetor double com o tamanho de passos máximo. Também será necessário vetores para armazenarmos as posições de referência de cada partícula (NP = Número de partículas).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
double *x_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de posição x de referência&lt;br /&gt;
double *y_zero  = (double *) malloc( NP * sizeof(double) ); //Valores de posição y de referência&lt;br /&gt;
double *msd = (double *) malloc( numMSD * sizeof(double) ); //Armazenaremos os valores de MSD(t) aqui&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Declararemos também uma assinatura da função ''meansquaredisplacement''.  Para ela, será necessário enviar as posições atuais, as posições de referência, o vetor onde armazenamos os valores de deslocamento e também a quantidade de passos a frente da posição de referencia estamos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void meansquaredisplacement (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No corpo principal do programa, chamaremos a função ''meansquaredisplacement''. Tomaremos o cuidado de garantir que calcularemos o MSD após atingirmos um ponto de equilíbrio do sistema (assim, ignoraremos os primeiros ''numMSD'' passos com um ''if'' ).&lt;br /&gt;
&lt;br /&gt;
Manteremos também um ''counter'', para sabermos quantas vezes passamos por esta função e acumulamos dados no vetor msd. Consideramos que o counter é igual para todos os valores de &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Caso isso não seja verdade, é necessário um vetor que contabiliza quantos vezes calculou-se o MSD para cada intervalo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if(passo &amp;gt;= numMSD){&lt;br /&gt;
 		meansquaredisplacement(x, y, x_zero, y_zero, msd, passo % numMSD);&lt;br /&gt;
		counter++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note que o valor de ''passo%numMSD'' varia de 0, quanto tomaremos nossos valores de referência, até  ''numMSD-1'' que será o nosso maior intervalo de passos. No caso deste programa calculamos o MSD para cada &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;. Geralmente programas que não apresentam essa necessidade, o que pode ser facilmente ajustado.&lt;br /&gt;
&lt;br /&gt;
Então, teremos o corpo da função ''meansquaredisplacement'', que, caso o parâmetro ''ref'' é zero, toma as posições atuais como referência. Ademais, calcula a diferença entre a posição atual e a posição de referência, fazendo a média sobre essa informação das partículas e salvando no vetor MSD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void meansquaredisplacement (double *x, double *y, double *x_zero, double *y_zero, double *msd, int ref){&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
if(ref == 0) //Se estamos no tempo de referência, salvamos a posição atual&lt;br /&gt;
  for(i=0; i&amp;lt;NP; i++){&lt;br /&gt;
    x_zero[i]=x[i];&lt;br /&gt;
    y_zero[i]=y[i];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
double aux=0; // Essa variável irá acumular a soma dos deslocamentos quadráticos&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;NP; i++)&lt;br /&gt;
	aux += (x[i]-x_zero[i])*(x[i]-x_zero[i]) + (y[i]-y_zero[i])*(y[i]-y_zero[i]);&lt;br /&gt;
&lt;br /&gt;
msd[ ref ] += aux/NP; // Então acumularemos o deslocamento quadrático médio&lt;br /&gt;
                      // por partícula para um intervalo ref de passos no vetor msd.&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por fim, depois do laço temporal, dividiremos o valor de ''counter'' por ''numMSD'', dando assim o valor de vezes em que se acumulou o valor do MSD por intervalo de passos. Para imprimirmos, usaremos o intervalo de passo em intervalo de tempo reduzido, multiplicando o número de passos pelo tamanho de cada passo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
counter = counter/numMSD; //Counter marcará quantas vezes se passou pela função para cada &lt;br /&gt;
                          //valor de intervalo de passos ref.&lt;br /&gt;
&lt;br /&gt;
for(i=0; i&amp;lt;numMSD; i++){&lt;br /&gt;
	fprintf(arquivo, &amp;quot;%lf\t%lf\n&amp;quot;, i*dt, (double)msd[i]/counter); //Impressão&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Análise de resultados e exemplos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Correlação de velocidades=&lt;br /&gt;
&lt;br /&gt;
A ''Correlação de velocidades'' é uma medida da variação das velocidades das partículas em um sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referências ==&lt;br /&gt;
&lt;br /&gt;
*Frenkel, Daan and Smit, Berend (2001). ''Understanding Molecular Simulation''. Academic Press.&lt;/div&gt;</summary>
		<author><name>Vsud</name></author>
	</entry>
</feed>