물리:자발_대칭_깨짐_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
물리:자발_대칭_깨짐_spontaneous_symmetry_breaking [2022/01/16 00:32] minwoo물리:자발_대칭_깨짐_spontaneous_symmetry_breaking [2023/09/05 15:46] (current) – external edit 127.0.0.1
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.1642260760.txt.gz
  • Last modified: 2023/09/05 15:46
  • (external edit)