Medidas estáticas
Em dinâmica molecular, medidas estáticas são medidas que
Psi 6
No estudo do agrupamento de pontos equidistantes em um espaço 2D, é possível provar matematicamente que o formato formado pelos pontos que maximiza a utilização do espaço é o padrão hexagonal. Para dinâmicas moleculares com potenciais de Lennard-Jones com densidade suficientemente alta (rho ~) é possível observar que o padrão formado após o relaxamento (tempo suficiente para a rede se estabilizar) é de fato o padrão hexagonal.
O psi 6 é uma análise de o quão hexagonal um padrão de posições está em um certo tempo da simulação. É possível associar a cada partícula um valor que varia entre -1 e 1 da hexagonalidade do padrão de posições formado por ele e seus primeiros vizinhos (conjunto de partículas mais próximas). Com essa medida é possível quantificar diferentes regiões da "caixa" em que as partículas estão localizadas e então localizar possíveis "defeitos" no padrão hexagonal.
Para um padrão hexagonal perfeito, cada partícula apresenta 6 primeiros vizinhos, cada qual posicionado simetricamente em torno dessa. Analisando a simetria, cada vizinho consecutivo deve apresentar um ângulo de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \frac{\pi}{3}} . Buscando uma relação em que esta situação seja a situação de , é possível definir que o vale:
Onde i é o índice do i-ésimo vizinho e n é o número de primeiros vizinhos. Esta relação deixa específico que o caso de 6 primeiros vizinhos e resulte em um valor de .
Implementação Computacional
Pode-se separar a implementação computacional em dois procedimentos necesssários: Encontrar os primeiros vizinhos para cada partícula e então calcular, de fato, o valor de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \psi_6} .
Encontrando vizinhos
Por definição, os primeiros vizinhos de uma partícula são aquelas partículas que estão presentes em um anel mais próximo dela, como mostra a fig.
O problema de encontrar primeiros vizinhos é um problema bastante discutido em teoria da computação e diversos métodos foram desenvolvidos para efetuar esta tarefa. Desta forma a maioria dos métodos otimizados são de difícil implementação e então não serão tratados nesse verbete. Se o leitor tiver interesse, entretanto, são recomendados as seguintes referências:
O método aqui citado é pouco otimizado, pois utiliza-se um for em Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle N^2} , porém de implementação razoavelmente simples. O método consiste em encontrar as 6 partículas mais próximas da partícula-teste (partícula em que busca-se calcular o valor de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \psi_6} ), desta forma o valor de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \psi_6} resultará em um valor razoável ( >0.8 ) se os 6 vizinhos são de fato os primeiros vizinhos e estão localizados em um padrão quase-hexagonal em torno da partícula-teste.
Define-se dois vetores chamados neighborsX,neighborsY e dNeighbors, que guardarão as posições X,Y e a distância do i-ésimo vizinho. Então os valores iniciais destes vetores recebem valores altos em relação as medidas da caixa (neste exemplo utilizou-se 20 para os dois lados), da seguinte forma:
for(i=0;i<6;i++){
neighborsX[i]=999;
neighborsY[i]=999;
dNeighbors[i]=999;
}
Após, realizar-se-á a busca pelas 6 partículas mais próximas da partícula-teste, como queremos calcular para todas as partículas (NP) presentes na simulação, faremos um "for" em Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle N^2} guardando as posições das duas partículas, é importante resetar os valores de dNeighbors toda vez que começa-se para outra partícula-teste. (Neste algoritmo chama-se a partícula-teste de "xOrg" (x original) e o possível vizinho de "x2") :
for(i=0;i<NP;i++){
xOrg=xx[i];
yOrg=yy[i];
for(j=0;j<6;j++){
dNeighbors[j]=999.;
}
for(j=0;j<NP;j++){
x2=xx[j];
y2=yy[j];
O próximo passo é de fato calcular a distância entre as partículas e testar se essa distância é menor que a maior distância presente no vetor dNeighbors. Isto é, o vetor dNeighbors começará com valores altos (999) e irá guardar partículas que tenham alguma distância menor que um valor presente em dNeighbors.
Também é importante ressaltar que esse algoritmo tomaria uma grande parte de tempo para sistemas com alto número de partículas, desta forma é bom setar um raio de corte para o cálculo da distância, isto é, os cálculos de se uma partícula é ou não vizinho somente serão calculados caso o possível vizinho esteja suficientemente perto da partícula-teste, suficientemente perto neste algoritmo é determinado utilizando a medida de g(r) (Explicada acima), pega-se um valor um pouco maior que o primeiro pico da g(r) e define-se como o "radiusLimit" (Raio limite) do codigo:
if(i!=j){
//Calcula distância entre partícula-teste e possível vizinho
deltaX=fabs(x2-xOrg);
deltaY=fabs(y2-yOrg);
deltaX=deltaX-rint(deltaX/Lx)*Lx;
deltaY=deltaY-rint(deltaY/Ly)*Ly;
dNew=sqrt((deltaX*deltaX)+(deltaY*deltaY));
// --- //
if(dNew<radiusLimit) // Testa se a distância é menor que o raio limite
{
//Procura-se o maior valor presente em dNeighbors e salva-se com o nome de "dOld", bem como seu indíce como "index"
dOld=0;
for(k=0;k<6;k++){
if(dNeighbors[k]>dOld){
dOld=dNeighbors[k];
index=k;
}
}
// --- //
// Testa-se se a distância do possível vizinho é menor que a maior distância presente já em dNeighbors
if(dNew<dOld){
neighborsX[index]=x2;
neighborsY[index]=y2;
dNeighbors[index]=dNew;
}
}
}
}
Portanto após esse algoritmo, temos guardadas as posições das 6 partículas mais próximas, é importante ressaltar que o "for" em partícula-teste ainda não foi fechado, e ainda dentro deste mesmo loop serão calculados os valores de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \psi_6 } .
Calculando o Psi 6
Tendo os valores de X e Y dos vizinhos da partícula-teste, podemos proceder para o cálculo do Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \psi_6 } . Para este cálculo, precisamos dos ângulos que cada vizinho tem em relação a partícula-teste, isto é, setamos um referencial X-Y com a origem na partícula-teste e calculamos o ângulo que cada vizinho tem com o eixo X, este ângulo será chamado de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \phi } e será dado pela seguinte relação:
Na implementação em código fica:
for(j=0;j<6;j++){ // Calculating angles
delX=neighborsX[j]-xx[i];
delY=neighborsY[j]-yy[i];
//Condições de contorno periódicas
delX=delX-rint(delX/Lx)*Lx;
delY=delY-rint(delY/Ly)*Ly;
// --- //
angle[j]=atan2(delY,delX);
if (angle[j]<0)
angle[j]=2*PI+angle[j];
psix[i]=0;
Agora somente precisa-se realizar um algoritmo que ordene o vetor "angle" do menor para o maior ângulo, desta forma é possível calcular os Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \theta_i }
Feito o ordenamento do vetor, basta calcular a média do valor do Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \psi_6 }
de cada vizinho. Para isto, precisamos calcular os valores de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \theta_i }
em função dos Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \phi }
, basta realizar a subtração do próximo vizinho no vetor pelo valor do ângulo do vizinho atual, dessa forma: Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \theta_i = \psi_{i+1} - \psi_i }
com exceção do último vizinho, que será o ângulo dele menos o do primeiro, desta forma a implementação fica:
firstAngle=angle[0];
for(j=0;j<5;j++){
angle[j]=cos(6.*(angle[j+1]-angle[j]));
}
angle[5]=cos(6.*(firstAngle+2*PI-angle[5]));
for(j=0;j<6;j++){
psix[i]+=angle[j]/6.;
}
}
}
E então está calculado o valor de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \psi_6 } , para facilitar a implementação é recomendado que este algoritmo seja uma função dentro de seu código e desta forma retorne o vetor "psix"
Pair Distribution Function
A Pair Distribution Function , ou "Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle g(r)} ", é uma função que estima o quão provável é encontrar duas partículas a uma distância Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle r} dentro de um sistema de várias partículas.
Em um sistema de Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle N} partículas, o Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle g(r)} é definido como a média do número de partículas a uma distância Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle r} :
Numéricamente pode ser interpretado como a média do número de pares de partículas a uma distância entre Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle r} e Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle r+\Delta r} pesado pelo volume/área desta região.
Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle g(r,\Delta r)=\frac{V_t}{N^2}\sum_{i=1}^N\sum_{j\neq i}^N\left[\frac{rect\left(\frac{r-|r_i-r_j|}{\Delta r}\right)}{V\left(r+\frac{\Delta r}{2}\right)-V\left(r-\frac{\Delta r}{2}\right)}\right] }
Onde Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle V_t} é o/a volume/área total e Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle rect} é a função retangular.
Em resumo, o Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle g(r,\Delta r)}
é a média dos histogramas do número de partículas em um bin de largura Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle \Delta r}
a uma Falhou ao verificar gramática (MathML com retorno SVG ou PNG (recomendado para navegadores modernos e ferramentas de acessibilidade): Resposta inválida ("Math extension cannot connect to Restbase.") do servidor "https://wikimedia.org/api/rest_v1/":): {\displaystyle r}
feitos para cada partícula no sistema pesado pelo volume/área deste bin.
Construção do Código
Resultados
Referências
- Frenkel, Daan and Smit, Berend (2001). Understanding Molecular Simulation. Academic Press.