Clusterização

De Física Computacional
Revisão de 16h49min de 13 de outubro de 2021 por Mgteus (discussão | contribs) (→‎Animações)
Ir para navegação Ir para pesquisar

PÁGINA EM CONSTRUÇÃO

Clusterização do Modelo de Ising

O modelo de Ising é definido como uma malha de tamanho L, quadrada quando em duas dimensões e cúbica quando em três dimensões, onde cada vértice apresenta um componente de spin de magnitude fixa que pode apontar para cima ou para baixo (+1 ou -1, respectivamente). O sistema pode ser descrito pelo seguinte hamiltoniano:

onde representa o valor do spin e a soma é feita sobre os pares de vértices próximas que são conectadas com um acoplamento ferromagnético de força .

Para um modelo de Ising bidimensional (o tipo que consideramos) é possível calcular sua temperatura crítica exata como:

Acima dessa temperatura o sistema está na ‘’’fase paramagnética‘’’, onde a magnetização média é nula, e abaixo dessa temperatura o sistema está na fase ‘’’fase ferromagnética’’’, onde a maioria dos spins se alinham e a magnetização se torna não-nula. Ao estudar o modelo de Ising em geral temos maior interesse no comportamento do sistema perto de , onde o sistema forma grupos grandes de spins para cima ou para baixo. Esses grupos contribuem muito para a energia do sistema, causando muita flutuação quando invertem.

O algoritmo de Metropolis é um ótimo algoritmo para realizar simulações do modelo de Ising. Porém, sua dinâmica de flip único é ineficiente especialmente quando próxima da temperatura crítica do sistema. As imprecisões estatísticas de quantidades como magnetização e energia interna do sistema aumentam quando próximo da temperatura crítica. Assim, quando esses grandes grupos de spins alinhados (clusters) invertem, há grandes imprecisões. Essa imprecisão aumenta com o tamanho das flutuações, mas diminui com o número de medidas feitas na simulação, então para se estudar a região perto de de modo mais preciso é necessário que a simulação aconteça por mais tempo. Porém, uma outra fraqueza do algoritmo de Metropolis é seu tempo de correlação grande ao redor da temperatura crítica. Isso significa que o número de medidas de uma simulação é pequena, então para diminuir as imprecisões estatísticas causadas pelas poucas medidas é necessário rodar o algoritmo por mais tempo.

Uma das propriedades do modelo de Ising é o fato de flutuações grandes gerarem medidas mais imprecisas. Porém, o tempo de correlação e o modo como ele se comporta próximo a é uma propriedade do algoritmo utilizado para estudar o sistema, e então é algo que pode ser otimizado.

Expoentes Críticos

Para estudar mais sobre a eficiência dos algoritmos no modelo de Ising podemos definir a temperatura reduzida como:

Essa grandeza indica o quão distante estamos da temperatura crítica , de modo que para estamos em . A partir disso, e sabendo que indica a largura médio dos clusters, temos que a expressão demonstra a divergência da largura de correlação (largura dos clusters). Se tratando do tempo, definimos como o tempo de correlação da simulação, medido em passos de Monte Carlo por sítio da rede. O expoente , chamado de expoente dinâmico, é um modo de quantificar a diferença de tempo que acontece devido à divergência. Um valor grande de simboliza que fica grande, por exemplo, fazendo uma simulação mais demorada e menos precisa quando próximo de .

Combinando as duas equações vistas, podemos escrever que . Essa relação indica que o tempo de correlação aumenta com o tamanho típico dos clusters. Considerando um sistema de tamanho finito porém (os tipos de sistema que simulamos), o valor máximo de vai ser o tamanho do sistema (e.g. um sistema x tem ). Podemos assim concluir que .

Sabendo a temperatura crítica do sistema (para Ising 2D, é possível usar a relação para medir por meio de simulações onde a temperatura do sistema é igual à temperatura crítica para vários tamanhos diferentes de , plotando versus em escala logarítmica. A inclinação da reta que liga todos esses pontos nos dá o valor de .

Por meio desse método, temos que o do algoritmo de Metropolis é e o do algoritmo de Wolff (um algoritmo de clusterização) é .

O motivo do tempo grande do algoritmo de Metropolis é a divergência do tamanho de correlação próximo da temperatura crítica. Ao se aproximar de , grandes regiões se formam onde todos os spins estão alinhados, e é demorado para que o algoritmo flipe essas regiões, dado que ele inverte os spins sítio por sítio.

Algoritmos de cluster, como o de Wolff, fazem uso da técnica de clusterização. Com isso, os algoritmos encontram agrupam spins alinhados em clusters que apontam para a mesma direção e invertem os spins desse cluster ao mesmo tempo. Algoritmos de clusterização permitem uma exploração mais efetivo do espaço de fase próximo da temperatura crítica por serem mais eficientes e de precisarem de menos iterações para terem medidas precisas.

Balanço Detalhado

Para respeitarmos o Balanço Detalhado, precisamos que a mudança da rede de um estado $ para um estado ocorra com a mesma probabilidade da mudança de um estado para , denotamos essa mudança por: , com sendo a razão de aceitação da mudança de um estado para um estado .

Supondo que estamos mudando de um estado para outro estado , temos que a diferença de energia entre esses dois é resultado da quebra das ligações entre pares de spins orientados na mesma direção que não foram adicionados ao cluster, já que, não há uma garantia que a ida de quebre a mesma quantidade de ligações que a volta de . A probabilidade de não adicionarmos um spin vizinho ao cluster é dada por: ; uma vez que é a probabilidade de incluir esse spin no cluster.

Supondo que existam ligações a serem quebradas na ida de , a probabilidade desse evento é dada por . Porém, o mesmo pode não valer para a volta de , em razão disso, precisamos analisar o caso em que não há o mesmo número de ligações a serem quebradas na volta e então a probabilidade será dada por com sendo o número de ligações a serem quebradas de .

Consideramos agora que e sejam as energias associadas aos estados e , respectivamente, temos que: a cada ligações que são quebradas de a energia aumenta com e para cada novas ligações geradas de a energia diminui com . Pode-se escrever então que a diferença de energia entre e é dada por:

Seguindo a definição do Balanço Detalhado e impondo que o Processo Markoviano dessas mudanças de estados descritas acima respeite a Distribuição de Boltzmann, precisamos que: , tal que,

Algoritmo de Wolf

Dinâmica do Algoritmo

O algoritmo de Wolff baseia-se principalmente em 4 passos. são estes:

  • 1 - Escolhe-se um sítio aleatório da rede;
  • 2 - Entre seus 4 vizinhos, se o spin do vizinho for igual ao do sítio inicial, adicionamos o vizinho ao cluster com probabilidade
  • 3 - Para cada vizinho que foi adicionado ao cluster no passo anterior, repetimos o processo do passo 2 adicionando os vizinhos desse vizinho que possuem spin na mesma direção com a mesma probabilidade . Faz-se isso para todos os sítios que são adicionados ao cluster.
  • 4 - Quando todos os vizinhos de todos os sítios adicionados ao cluster tiveram ao menos uma “chance” de serem adicionados ao cluster, flipamos o cluster.


Dinâmica do algoritmo.
Alt text
Demonstração da dinâmica de clusterização do algoritmo na temperatura crítica .


Simulações

Animações

Animações do algoritmo de Wolff em função da Temperatura .
Alt text
Simulação para temperatura abaixo da temperatura crítica .
Alt text
Simulação na temperatura crítica .
Alt text
Simulação para tempetura acima da temperatura crítica .

Propriedades do Algoritmo de Wolff

Probabilidade em função da temperatura.
Alt text
Gráfico da probabilidade de aceitação em função de


Códigos Fonte

Função da Dinâmica de Clusterização

def cluster_din(sitio):
    stack = []
    oldspin = s[sitio]
    newspin = (-1)*s[sitio]
    s[sitio] = newspin
    sp=1
    stack.append(sitio)
    
    while (sp):
        sp = sp-1
        atual = stack[sp]
        stack.pop()        
    
        for j in range(4):
            nn=viz[atual][j]
            if s[nn] == oldspin: #IF da orientação do vizinho
             rfloat1 = rng.random()
             if (rfloat1<prob) : #IF da inclusão no cluster
                 stack.append(nn)
                 sp = sp+1
                 s[nn] = newspin
    return


Função do Cálculo da Magnetização

def cluster_din_mag(sitio, mag):
    stack = []
    oldspin = s[sitio]
    newspin = (-1)*s[sitio]
    s[sitio] = newspin
    mag = mag +2*s[sitio]
    sp=1
    stack.append(sitio)
    
    while (sp):
        sp = sp-1
        atual = stack[sp]
        stack.pop()        
    
        for j in range(4):
            nn=viz[atual][j]
            if s[nn] == oldspin:   
             rfloat1 = rng.random()
             if (rfloat1<prob) : #IF da inclusão no buffer
                 stack.append(nn)
                 sp = sp+1
                 s[nn] = newspin
                 mag = mag +2*s[nn]
    return mag

Referências

[1] M. E. J. Newman, G. T. Barkema, "Monte Carlo Methods in Statistical Physics". Oxford University Press Inc., New York, 1999.

[2] Materias da disciplina disponíveis em: <https://moodle.ufrgs.br/course/view.php?id=80767>

[3] E. Luijten, “Introduction to Cluster Monte Carlo Algorithms” <http://csml.northwestern.edu/resources/Reprints/lnp_color.pdf>

[4] <https://fiscomp.if.ufrgs.br/index.php/Ising_2D>

[5] Nightingale and Blöte (1996).

[6] Coddington e Baillie (1992).