물리:자발_대칭_깨짐_spontaneous_symmetry_breaking

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revisionBoth sides next revision
물리:자발_대칭_깨짐_spontaneous_symmetry_breaking [2022/01/16 00:27] minwoo물리:자발_대칭_깨짐_spontaneous_symmetry_breaking [2022/01/16 10:43] minwoo
Line 1: Line 1:
-자발 대칭 깨짐(spontaneous symmetry breaking)이 일어나는 대표적인 로, 2차원 이징 모형을 들 수 있다.+자발적 대칭 깨짐(spontaneous symmetry breaking)이 일어나는 대표적인 경우로, 2차원 이징 모형을 예로 들 수 있다.
  
-이징 모형의 경우, 해밀토니안은+이징 모형의 경우, 외부 자기장이 0인 상황에서 해밀토니안은
 $$E = -J \sum_{\left< xy \right>} \sigma_x \sigma_y$$ $$E = -J \sum_{\left< xy \right>} \sigma_x \sigma_y$$
 로 주어진다. 로 주어진다.
Line 7: Line 7:
 위의 식에서, 모든 각각의 스핀 $\sigma_x, \sigma_y$ 의 부호를 반대로 뒤집어도 에너지는 똑같다. 위의 식에서, 모든 각각의 스핀 $\sigma_x, \sigma_y$ 의 부호를 반대로 뒤집어도 에너지는 똑같다.
 즉, 스핀들이 선호하는 방향이 존재하지 않는 대칭적(symmetry)인 상황이지만, 즉, 스핀들이 선호하는 방향이 존재하지 않는 대칭적(symmetry)인 상황이지만,
 +
 이징모형에서는 마구잡이로 배열되어 있는 무질서한 상태(disorder)로 부터, 이징모형에서는 마구잡이로 배열되어 있는 무질서한 상태(disorder)로 부터,
 한 방향의 스핀으로 배열(order)되려는 상태로 상전이가 일어난다. 한 방향의 스핀으로 배열(order)되려는 상태로 상전이가 일어난다.
Line 12: Line 13:
 이러한 현상을 '자발 대칭 깨짐(spontaneous symmetry breaking)' 이라고 한다. 이러한 현상을 '자발 대칭 깨짐(spontaneous symmetry breaking)' 이라고 한다.
  
-아래의 그림은 각각 '초기의 스핀 배열 상태' , '100 MC steps 지난 상태' , '1000 MC steps 지난 상태' , '5000 MC steps 지난 상태' 의 +아래의 그림은 각각 '초기의 스핀 배열 상태' , '100 MC steps 지난 상태' , '1100 MC steps 지난 상태' , '5000 MC steps 지난 상태' 의 
 2차원 이징모형 시뮬레이션 결과이다.  2차원 이징모형 시뮬레이션 결과이다. 
  
-$\beta=0.5$ 로 설정하였고, 편의상 $J$=1 로 두었다. (양(+)의 부호 스핀은 노란색, 음(-)의 부호 스핀은 남색)+$\beta=0.5$ 로 설정하였고, 편의상 $J$=1 로 두었다. 전체 스핀의 개수는 900개 이다.  
 + 
 +(양(+)의 부호 스핀은 노란색, 음(-)의 부호 스핀은 남색) 
 + 
 +이때 1 MC step이라 함은 한번의 monte carlo step을 의미하며, 설정 상 전체 스핀의 개수가 30x30 임을 고려하였다.
  
 {{::물리::initial_state.png?300|}}   {{::물리::100_mc_steps.png?300|}}   {{::물리::1000_mc_steps.png?300|}}   {{::물리::5000_mc_steps.png?300|}}  {{::물리::initial_state.png?300|}}   {{::물리::100_mc_steps.png?300|}}   {{::물리::1000_mc_steps.png?300|}}   {{::물리::5000_mc_steps.png?300|}} 
Line 26: Line 31:
  
  
-시뮬레이션은 아래의 C++ 코드로 수행하였고, cout을 이용하여 +시뮬레이션은 아래의 C++ 코드로 수행하였고, cout을 이용하여 spin을 담아둔 matrix를 원하는 MC step에 출력하여 그렸다.
 <code C++> <code C++>
 #include <iostream> #include <iostream>
Line 33: Line 38:
 #include <random> #include <random>
 #include <vector> #include <vector>
 + 
 using namespace std; using namespace std;
 + 
 int main() { int main() {
-    const int lsize=30; + const int lsize=30; 
-    const float beta = 0.5; + const float beta = 0.5; 
-    const float J = 1; + const float J = 1; 
-    const int MC_steps=1000; + const int iter=lsize*lsize*5000; 
-    const int iter=lsize*lsize*5000; + int i; int j; 
-    const int timepoint = 100000; + float del_E; float mp_probability; // mp means metropolis 
-  + float spin[lsize][lsize] = { 0 }; 
-    int i; int j; + random_device rd; 
-    float del_E; float mp_probability; // mp means metropolis + mt19937 gen(rd()); 
-    float spin[lsize][lsize] = { 0 }; + bernoulli_distribution distrib(0.5); 
-    random_device rd; + uniform_int_distribution<> distri(0, lsize - 1); 
-    mt19937 gen(rd()); + uniform_real_distribution<> dist(0, 1); 
-    bernoulli_distribution distrib(0.5); +  
-    uniform_int_distribution<> distri(0, lsize - 1); + for (int t=0; t<iter;t++){ 
-    uniform_real_distribution<> dist(0, 1); + if (t==0){ 
- + for (int a=0;a<lsize;a++){ 
-    for (int t=0; t<iter;t++){ + for (int b=0;b<lsize;b++){ 
- if (t==0){ + if (distrib(gen)){ 
-     for (int a=0;a<lsize;a++){ + spin[a][b]=1; 
- for (int b=0;b<lsize;b++){ + }  
-             if (distrib(gen)){ + else { 
- spin[a][b]=1; + spin[a][b]=-1; 
-     }  +
-     else { +
- spin[a][b]=-1; + }
-     }+
  }  }
-     } +  
-+ else { 
-  + i = distri(gen); 
- else { + j = distri(gen); 
-     i = distri(gen); +  
-            j = distri(gen); + if (i<lsize-1 && j<lsize-1){ 
- + del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[i+1][j] + spin[i][j-1] + spin[i][j+1])); // periodic boundary condition 
-     if (i<lsize-1 && j<lsize-1){ +
- del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[i+1][j] + spin[i][j-1] + spin[i][j+1])); // periodic boundary condition + else if (i==lsize-1 && j<lsize-1){ 
-     + del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[0][j] + spin[i][j-1] + spin[i][j+1])); 
-     else if (i==lsize-1 && j<lsize-1){ +
-                del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[0][j] + spin[i][j-1] + spin[i][j+1])); +  
-     + else if (i<lsize-1 && j==lsize-1){ 
-            else if (i<lsize-1 && j==lsize-1){ + del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[i+1][j] + spin[i][j-1] + spin[i][0]));  
- del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[i+1][j] + spin[i][j-1] + spin[i][0]));  +
-     +  
-     else if (i==lsize-1 && j==lsize-1){ + else if (i==lsize-1 && j==lsize-1){ 
- del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[0][j] + spin[i][j-1] + spin[i][0]));  + del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[0][j] + spin[i][j-1] + spin[i][0]));  
-     +
- +  
-            if (exp(-beta*del_E) < 1){ + if (exp(-beta*del_E) < 1){ 
- mp_probability = exp(-beta*del_E); + mp_probability = exp(-beta*del_E); 
-     +
- +  
-     else if (exp(-beta*del_E) >= 1) { + else if (exp(-beta*del_E) >= 1) { 
- mp_probability = 1; + mp_probability = 1; 
-     +
-  +  
-     if (dist(gen) < mp_probability){ + if (dist(gen) < mp_probability){ 
-         spin[i][j] = spin[i][j]*(-1); //spin flip accept + spin[i][j] = spin[i][j]*(-1); 
-     +
-    +
- + 
 } }
-    return 0;+ return 0;
 } }
  
 </code> </code>
  
 +2차원 이징 모형에 대한 더 자세한 개념 및 보다 효율적인 알고리즘에 대해서 알기 위해 아래의 게시글을 확인할 수 있다.
 +====== 함께 보기 ======
 +
 +[[물리:2차원_이징_모형|2차원 이징 모형]]
 +
 +[[전산물리학:울프_군집_셈법_wolff_cluster_algorithm|울프 군집 셈법(Wolff cluster algorithm)]]
  
  
  • 물리/자발_대칭_깨짐_spontaneous_symmetry_breaking.txt
  • Last modified: 2023/09/05 15:46
  • by 127.0.0.1