물리:자발_대칭_깨짐_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:16] 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 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++ 코드로 작성하였다.+시뮬레이션은 아래의 C++ 코드로 수행하였고, cout을 이용하여 spin을 담아둔 matrix를 원하는 MC step에 출력하여 그렸다.
 <code C++> <code C++>
 #include <iostream> #include <iostream>
-#include <fstream> 
 #include <cstdlib> #include <cstdlib>
 #include <cmath> #include <cmath>
 #include <random> #include <random>
 #include <vector> #include <vector>
-#include <algorithm> + 
 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;
- 
- const int timepoint = 100000; 
-  
  int i; int j;  int i; int j;
  float del_E; float mp_probability; // mp means metropolis  float del_E; float mp_probability; // mp means metropolis
Line 55: Line 54:
  uniform_int_distribution<> distri(0, lsize - 1);  uniform_int_distribution<> distri(0, lsize - 1);
  uniform_real_distribution<> dist(0, 1);  uniform_real_distribution<> dist(0, 1);
 + 
  for (int t=0; t<iter;t++){  for (int t=0; t<iter;t++){
- 
  if (t==0){  if (t==0){
  for (int a=0;a<lsize;a++){  for (int a=0;a<lsize;a++){
Line 70: Line 68:
  }  }
  }  }
-  + 
- if (t== iter-1){ +
-  +
- for (int v = 0; v < lsize; v++) { +
- for (int w = 0; w < lsize; w++) { +
- if (w==0){ +
- cout<<"["; +
-+
- if (w>=0 && w<lsize-1){ +
- cout<<spin[v][w]<<","; +
-+
- else if (w==lsize-1){ +
- cout<<spin[v][w]<<"]"; +
-+
- if (w==lsize-1 && v==lsize-1){ +
- cout<<"\n"; +
-+
-  +
-+
- cout<<","<<"\n"; +
-+
-+
- +
  else {  else {
  i = distri(gen);  i = distri(gen);
  j = distri(gen);  j = distri(gen);
 + 
  if (i<lsize-1 && j<lsize-1){  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  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
Line 103: Line 79:
  del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[0][j] + spin[i][j-1] + spin[i][j+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[i][j] = spin[i][j]*(-1);
  }  }
  }  }
- + 
 } }
  return 0;  return 0;
Line 131: Line 107:
 </code> </code>
  
 +2차원 이징 모형에 대한 더 자세한 개념 및 보다 효율적인 알고리즘에 대해서 알기 위해 아래의 게시글을 확인할 수 있다.
 +====== 함께 보기 ======
 +
 +[[물리:2차원_이징_모형|2차원 이징 모형]]
 +
 +[[전산물리학:울프_군집_셈법_wolff_cluster_algorithm|울프 군집 셈법(Wolff cluster algorithm)]]
  
  
  • 물리/자발_대칭_깨짐_spontaneous_symmetry_breaking.1642259804.txt.gz
  • Last modified: 2023/09/05 15:46
  • (external edit)