Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| 물리:자발_대칭_깨짐_spontaneous_symmetry_breaking [2022/01/16 00:33] – minwoo | 물리:자발_대칭_깨짐_spontaneous_symmetry_breaking [2023/09/05 15:46] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | 자발 대칭 깨짐(spontaneous symmetry breaking)이 일어나는 대표적인 | + | 자발적 대칭 깨짐(spontaneous symmetry breaking)이 일어나는 대표적인 |
| - | 이징 모형의 경우, 해밀토니안은 | + | 이징 모형의 경우, |
| $$E = -J \sum_{\left< | $$E = -J \sum_{\left< | ||
| 로 주어진다. | 로 주어진다. | ||
| Line 13: | Line 13: | ||
| 이러한 현상을 ' | 이러한 현상을 ' | ||
| - | 아래의 그림은 각각 ' | + | 아래의 그림은 각각 ' |
| 2차원 이징모형 시뮬레이션 결과이다. | 2차원 이징모형 시뮬레이션 결과이다. | ||
| - | $\beta=0.5$ 로 설정하였고, | + | $\beta=0.5$ 로 설정하였고, |
| + | |||
| + | (양(+)의 부호 스핀은 노란색, 음(-)의 부호 스핀은 남색) | ||
| + | |||
| + | 이때 1 MC step이라 함은 한번의 monte carlo step을 의미하며, | ||
| {{:: | {{:: | ||
| Line 34: | Line 38: | ||
| #include < | #include < | ||
| #include < | #include < | ||
| + | |||
| using namespace std; | using namespace std; | ||
| + | |||
| int main() { | int main() { | ||
| - | | + | 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; |
| - | | + | int i; int j; |
| - | const int timepoint = 100000; | + | float del_E; float mp_probability; |
| - | + | float spin[lsize][lsize] = { 0 }; | |
| - | | + | random_device rd; |
| - | float del_E; float mp_probability; | + | mt19937 gen(rd()); |
| - | float spin[lsize][lsize] = { 0 }; | + | bernoulli_distribution distrib(0.5); |
| - | random_device rd; | + | uniform_int_distribution<> |
| - | mt19937 gen(rd()); | + | uniform_real_distribution<> |
| - | bernoulli_distribution distrib(0.5); | + | |
| - | uniform_int_distribution<> | + | for (int t=0; t< |
| - | uniform_real_distribution<> | + | if (t==0){ |
| - | + | for (int a=0; | |
| - | for (int t=0; t< | + | for (int b=0; |
| - | if (t==0){ | + | if (distrib(gen)){ |
| - | | + | spin[a][b]=1; |
| - | for (int b=0; | + | } |
| - | | + | else { |
| - | spin[a][b]=1; | + | spin[a][b]=-1; |
| - | | + | } |
| - | | + | } |
| - | spin[a][b]=-1; | + | } |
| - | | + | |
| } | } | ||
| - | } | + | |
| - | } | + | else { |
| - | + | i = distri(gen); | |
| - | else { | + | j = distri(gen); |
| - | | + | |
| - | j = distri(gen); | + | if (i< |
| - | + | del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[i+1][j] + spin[i][j-1] + spin[i][j+1])); | |
| - | | + | } |
| - | del_E=2*J*(spin[i][j]*(spin[i-1][j] + spin[i+1][j] + spin[i][j-1] + spin[i][j+1])); | + | else if (i==lsize-1 && j< |
| - | | + | 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< |
| - | else if (i< | + | 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){ |
| - | 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) { |
| - | mp_probability = 1; | + | mp_probability = 1; |
| - | | + | } |
| - | + | ||
| - | | + | if (dist(gen) < mp_probability){ |
| - | | + | spin[i][j] = spin[i][j]*(-1); |
| - | | + | } |
| - | } | + | } |
| - | + | ||
| } | } | ||
| - | | + | return 0; |
| } | } | ||