물리:자발_대칭_깨짐_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:32] 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 13: 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 34: 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); 
 + 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 
 +
 + 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[i+1][j] + spin[i][j-1] + spin[i][0]));  
 +
 +  
 + 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]));  
 +
 +  
 + if (exp(-beta*del_E) < 1){ 
 + mp_probability = exp(-beta*del_E); 
 +
 +  
 + else if (exp(-beta*del_E) >= 1) { 
 + mp_probability = 1; 
 +
 +  
 + if (dist(gen) < mp_probability){ 
 + spin[i][j] = spin[i][j]*(-1); 
 + }
  }  }
-     } + 
-+
-  +
- else { +
-     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 +
-     } +
-     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[i+1][j] + spin[i][j-1] + spin[i][0]));  +
-     } +
-     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]));  +
-     } +
- +
-            if (exp(-beta*del_E) < 1){ +
- mp_probability = exp(-beta*del_E); +
-     } +
- +
-     else if (exp(-beta*del_E) >= 1) { +
- mp_probability = 1; +
-     } +
-  +
-     if (dist(gen) < mp_probability){ +
-         spin[i][j] = spin[i][j]*(-1); //spin flip accept +
-     } +
-    } +
- +
 } }
-    return 0;+ return 0;
 } }
  
Line 105: Line 108:
  
 2차원 이징 모형에 대한 더 자세한 개념 및 보다 효율적인 알고리즘에 대해서 알기 위해 아래의 게시글을 확인할 수 있다. 2차원 이징 모형에 대한 더 자세한 개념 및 보다 효율적인 알고리즘에 대해서 알기 위해 아래의 게시글을 확인할 수 있다.
 +====== 함께 보기 ======
 +
 +[[물리:2차원_이징_모형|2차원 이징 모형]]
  
-[[물리:2차원_이징_모형|모형]] +[[전산물리학:울프_군집_셈법_wolff_cluster_algorithm|울프 군집 셈법(Wolff cluster algorithm)]]
-[[전산물리학:울프_군집_셈법_wolff_cluster_algorithm|함께 보기]]+
  
  
  • 물리/자발_대칭_깨짐_spontaneous_symmetry_breaking.txt
  • Last modified: 2023/09/05 15:46
  • by 127.0.0.1